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")是动态编译。当时不懂。下面是我的笔记,