第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

希望自定義一個函數(shù),傳入類.class與可變參數(shù),返回通過反射調(diào)用對應(yīng)構(gòu)造函數(shù)構(gòu)造出的類

希望自定義一個函數(shù),傳入類.class與可變參數(shù),返回通過反射調(diào)用對應(yīng)構(gòu)造函數(shù)構(gòu)造出的類

慕的地6264312 2023-04-09 10:06:08
注意:int.class不等于Integer.class 問題:因此此處調(diào)用Person p = createPerson(Person.class,3,"nilu");會找不到對應(yīng)構(gòu)造函數(shù),因為它找的是傳入Integer與String的構(gòu)造函數(shù),如何解決?//junit測試函數(shù)@Testpublic void test() throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {Person p = createPerson(Person.class,3,"nilu");p.eat();}public <T> T createPerson(Class<T> clazz, Object ...args) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {final List<Class> list = new ArrayList<Class>();for(Object obj : args) {list.add(obj.getClass());}Class []_args = new Class[args.length];list.toArray(_args);list.clear();Constructor<T> constructor = clazz.getConstructor(_args);T t = constructor.newInstance(args);return t;}類:public class Person {private String name;private int age;public Person() {this.age = 18;this.name = "default name";System.out.println("Person constructor");}public Person(String name) {this.name = name;System.out.println("Person name : " + name);}public Person(int age, String name) {this.age = age;this.name = name;System.out.println("Person name : " + name);System.out.println("Person age : " + age);}}=======================================================================問題描述補充:Constructor<T> constructor = clazz.getConstructor(_args);這一行 根據(jù)_args是哪些.class 會決定得到哪個構(gòu)造函數(shù),這里實際得到的是Integer.class與String.class;然而Person(int age, String name)實際要的是int.class與String.class;這是由于調(diào)用createPerson時候,3這個int被自動裝箱了,變成了Integer,因此程序會報錯提示味找到構(gòu)造函數(shù)createPerson(Integer,String)
查看完整描述

2 回答

?
PIPIONE

TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊

循環(huán)取參數(shù)class的時候判斷一下是否基本類型,如果是就先轉(zhuǎn)成基本類型的class。或者判斷下這個類是否有個TYPE常量:


Class cls = obj.getClass();Field f = cls.getDeclaredField("TYPE");if (f != null) {    list.add((Class) f.get(null));else {    list.add(cls);}


查看完整回答
反對 回復(fù) 2023-04-11
?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗 獲得超6個贊

參數(shù)類型不一致,自動裝箱,自動拆箱先不要考慮試試。


查看完整回答
反對 回復(fù) 2023-04-11
  • 2 回答
  • 0 關(guān)注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號