From: "Philip A. Chapman" <pchapman@pcsw.us>
To: David Michel <dmichel76@googlemail.com>
Cc: java@gcc.gnu.org
Subject: Re: how to deal with non-generic (legacy) code ?
Date: Tue, 04 Aug 2009 15:20:00 -0000 [thread overview]
Message-ID: <4A7851C4.9000500@pcsw.us> (raw)
In-Reply-To: <b5bf7a380908040809n691480caib4107ffd7d77479c@mail.gmail.com>
You have two options. Either you can use the @SuppressWarnings
annotation to tell the compiler "yes, I know what I am doing here." or
you can use the <?> to match any generic type.
@SuppressWarnings("unchecked")
private static Object callMethod(String cname, String mname, String
funcArg) {
try {
Class cls = Class.forName(cname);
Class argType[] = new Class[1];
argType[0] = String.class;
Method meth = cls.getMethod(mname, argType);
Object retObj = meth.invoke(cls.newInstance(), funcArg);
return retObj;
} catch (Exception e) {
System.err.printf(
"Error: loading of the specified has failed:\n%s\n", e);
return null;
}
}
private static Object callMethod(String cname, String mname, String
funcArg) {
try {
Class<?> cls = Class.forName(cname);
Class<?> argType[] = new Class[1];
argType[0] = String.class;
Method meth = cls.getMethod(mname, argType);
Object retObj = meth.invoke(cls.newInstance(), funcArg);
return retObj;
} catch (Exception e) {
System.err.printf(
"Error: loading of the specified has failed:\n%s\n", e);
return null;
}
}
David Michel wrote:
> Hi All,
>
> We all know that generics have been introduced in jdk 1.5 and that
> Sun's javac still accepts raw types for backward compatibility.
>
> With gcj, however, one will always get some warnings like "Vector is a
> raw type. References to generic type Vector<T> should be
> parameterized" when using raw types. It's easy to write the code with
> generics properly so that these warnings do not appear, however, how
> does one deal with, for instance, a method from a somewhat older
> legacy code that returns a raw type.
>
> Similarly, I'm using the java.lang.reflect package to invoke method
> from its string name and I wrote this:
>
> private static Object callMethod(String cname, String mname,
> String funcArg){
> try {
> Class cls = Class.forName(cname);
> Class argType[] = new Class[1];
> argType[0] = String.class;
> Method meth = cls.getMethod(mname, argType);
> Object retObj = meth.invoke(cls.newInstance(),funcArg);
> return retObj;
> }
> catch (Exception e){
> System.err.printf("Error: loading of the specified has
> failed:\n%s\n",e);
> return null;
> }
> }
>
> and I get these warnings:
>
> warning: Class is a raw type. References to generic type Class<T>
> should be parameterized
> Class cls = Class.forName(cname);
> ^^^^^
> ./src/eu/keep/cli/Cli.java:191: warning: Class is a raw type.
> References to generic type Class<T> should be parameterized
> Class argType[] = new Class[1];
> ^^^^^
> ./src/eu/keep/cli/Cli.java:193: warning: Type safety: The method
> getMethod(String, Class...) belongs to the raw type Class. References
> to generic type Class<T> should be parameterized
> Method meth = cls.getMethod(mname, argType);
>
>
> What is the proper way to deal with this ?
> Is there a way to switch these warnings off ?
>
> Cheers
> David
--
Philip A. Chapman
Desktop, Web Application, and Enterprise Development
Phone: 251-275-6237
next prev parent reply other threads:[~2009-08-04 15:20 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-04 15:09 David Michel
2009-08-04 15:20 ` Philip A. Chapman [this message]
2009-08-04 15:21 ` Bryce McKinlay
2009-08-04 15:26 ` David Michel
2009-08-04 15:28 ` Andrew John Hughes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A7851C4.9000500@pcsw.us \
--to=pchapman@pcsw.us \
--cc=dmichel76@googlemail.com \
--cc=java@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).