亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

把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 可是,當我不想用

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


正在回答

2 回答

?本來代碼里面是動態類實現,你Constructor?constructor=c.getConstructor();這行代碼使用了靜態類的實現方式,應該會編譯不過,因為c.getConstructor()無法在靜態編譯期間確定類型。

1 回復 有任何疑惑可以回復我~

正解。多謝你的解答,后面我看書之后,了解了Class.forName("xxx")是動態編譯。當時不懂。下面是我的筆記,

http://img1.sycdn.imooc.com//5f0c138200010f6316931079.jpg

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

把Class.forName()換一種寫法就報錯了!

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號