請問一下紅框裡的代碼是什麼意思呢,為什麼不能像上面那樣直接example2=(Example01) constructor.newInstance(“100”,“200”,“300”)直接example2=(Example01) constructor.newInstance(“100”,“200”,“300”)的話不斷打印“在創建對象時拋出異常,下面執行setAccessable"
這個問題要分幾步回答:
1,可變參數,java編譯器是將可變參數當作數組處理的
method(String... args) { }
等價於
method(String[] args){ }
2,Constuctor.newInstance()使用的就是可變參數
public T newInstance(Object ... initargs)
等同於
public T newInstance(Object[] initargs)
3,你要定位到的構造函數相當於
Example01(String[] strings)
而你的代碼
constructor.newInstance(“100”,“200”,“300”)
等同於
constructor.newInstance(new Object[]{“100”,“200”,“300”})
代表的是找有三個string作為參數的構造函數,因此只能用
constructor.newInstance(new Object[]{new String[]{“100”,“200”,“300”}})
你理想中希望java能將三個String當作可變參數去匹配,但是除了直接通過方法調用,外部是不能識別可變參數的