public inbox for java@gcc.gnu.org
 help / color / mirror / Atom feed
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

  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).