How should I re-write this?
Hello, consider the following program:
package action;
public class MyTest {
public static void main(String[] args) {
try {
ClassLoader cl = MyTest.class.getClassLoader();
Class<?> c = cl.loadClass("action.SomeClass");
SomeClass inst = (SomeClass)c.newInstance();
System.out.println(inst);
SomeClass inst2 = MyTest.loadClass("action.SomeClass");
System.out.println(inst2);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public static <T> T loadClass(String className) {
T inst = null;
try {
ClassLoader cl = MyTest.class.getClassLoader();
Class<?> c = cl.loadClass(className);
inst = (T)c.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return inst;
}
}
class SomeClass {
@Override public String toString() {
return "1337";
}
}
I'm getting a warning on line 27 for the following statement:
inst = (T)c.newInstance();
The warning reads:
Type safety: Unchecked cast from capture#4-of ? to T
Ok, I think I get it. The compiler cannot know at compile time that the
cast will work. But if you look at the code in the main method, I don't
get a warning on line 11:
SomeClass inst2 = MyTest.loadClass("action.SomeClass");
I thought the above line has the same problem as the one that is being
warned about?
I have two questions:
1. Why don't I get a warning for line 11
SomeClass inst2 = MyTest.loadClass("action.SomeClass"); ?
2. How should I rewrite the generic method loadClass?
- Fencer