我必須列出物件Object1,,,,Object2。Object3
class Object1 {
private String str;
private double num;
public Object1(...){
...
}
public double getNum(){
return this.num;
}
@Override
public String toString(){
return String.format(" String: %s, Number %.2f", this.str, this.num);
}
}
為了做到這一點,我創建了另一個類Item,它根據建構式的輸入,初始化一個Object1或Object2等等,并實體化一個access()回傳所述物件的方法。
class Item{
private Object item;
public Item(String str, double num){
item = new Object1(str, num);
}
public Item(String str, double num, int num1){
item = new Object2(str, num, num1);
}
...
public Object access(){
return item;
}
}
在 Main 如果我訪問toString它會回傳正確輸出的專案,但我無法訪問任何其他方法Object1等。
print(list.get(i).access().toString());
>>> String: Something, Number: 99.92
print("" list.get(i).access().getNum());
>>> Cannot resolve method getNum() in Object
我怎樣才能正確地做到這一點?
uj5u.com熱心網友回復:
如果你知道這是一個 Object1,你可以轉換它,比如
print("" ((Object1)list.get(i).access()).getNum());
如果你不知道它是一個 Object1,你可以使用 instanceof
if (list.get(i).access() instanceof Object1) {
...
}
最后,在你什么都不知道的情況下,有一種方法可以內省物件的方法
list.get(i).access().getClass().getMethods();
uj5u.com熱心網友回復:
使用 Java 17,您可以試試這個(激活預覽):
…
switch( list.get( i ).access() )
{
case Object1 object1 -> object1.getNum();
case Object2 object2 -> object2. … // whatever method fits …
case Object3 object3 -> object3. …
case null -> throw new Error( "access() returned null" );
default -> throw new Error( "No clue what accessed() returned …";
}
這里的關鍵字是“switch 的模式匹配”,我認為這是一個很好的功能來解決像你這樣的問題——盡管我個人更喜歡盡可能避免這樣的設計。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/447642.html
