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