62,615
社区成员
发帖
与我相关
我的任务
分享
package sh.pl;
import java.util.HashMap;
import java.util.Map;
public class A {
private static Map<Class<? extends A>, A> buff = new HashMap<Class<? extends A>, A>();
public static A newInstance(Class<? extends A> clazz) {
A ret = null;
try {
ret = buff.get(clazz);
if (ret == null) {
ret = clazz.newInstance();
buff.put(clazz, ret);
}
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
@SuppressWarnings("unchecked")
public static A newInstance(String className) {
A ret = null;
try {
Class<?> clazz = Class.forName(className);
if (A.class.isAssignableFrom(clazz)) {
ret = newInstance((Class<? extends A>)clazz);
}
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
public static void main(String[] args) {
A a = A.newInstance(C.class);
System.out.println("I am " + a.getClass().getName());
a = A.newInstance("sh.pl.B");
System.out.println("I am " + a.getClass().getName());
}
}
package sh.pl;
public class C extends A {
}
package sh.pl;
public class B extends A {
}
package sh.pl;
public class A {
public static A newInstance(Class<? extends A> clazz) {
try {
return clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static A newInstance(String className) {
A ret = null;
try {
ret = (A)Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return ret;
}
public static void main(String[] args) {
A a = A.newInstance(C.class);
System.out.println("I am " + a.getClass().getName());
a = A.newInstance("sh.pl.B");
System.out.println("I am " + a.getClass().getName());
}
}