把Class.forName()換一種寫法就報錯了!
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 可是,當(dāng)我不想用
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
2020-07-13
?本來代碼里面是動態(tài)類實現(xiàn),你Constructor?constructor=c.getConstructor();這行代碼使用了靜態(tài)類的實現(xiàn)方式,應(yīng)該會編譯不過,因為c.getConstructor()無法在靜態(tài)編譯期間確定類型。
2020-07-13
正解。多謝你的解答,后面我看書之后,了解了Class.forName("xxx")是動態(tài)編譯。當(dāng)時不懂。下面是我的筆記,