1 首先,这段代码没有任何问题。
public class OfficeBetter{
public static void main(String[] args){
try{
OfficeAble oa =(OfficeAble) Class.forName(args[0]).getConstructor().newInstance();
oa.start();
}catch(Exception e){
e.printStackTrace();
}
}
}2 可是,当我不想用
Class.forName(args[0])
来获取类类型,改成这种写法就报错了:
public class OfficeBetter{
public static void main(String[] args){
try{
Class c=Class.forName(args[0]);
Constructor constructor=c.getConstructor();
OfficeAble oa=(OfficeAble)constructor.newInstance();
oa.start();
}catch(Exception e){
e.printStackTrace();
}
}
}谁能帮我分析一下吗?编译报错:
OfficeBetter.java:5: error: cannot find symbol Constructor constructor=c.getConstructor(); ^ symbol: class Constructor location: class OfficeBetter Note: OfficeBetter.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 1 error
本来代码里面是动态类实现,你Constructor constructor=c.getConstructor();这行代码使用了静态类的实现方式,应该会编译不过,因为c.getConstructor()无法在静态编译期间确定类型。
正解。多谢你的解答,后面我看书之后,了解了Class.forName("xxx")是动态编译。当时不懂。下面是我的笔记,
