[英]Accessing instance variables in implemented class
我正在完成一項作業,並為我提供了一個名為Place的界面。 它有幾個定義的方法,沒有變量。 我創建了一個實現Place的類,它包含一個字符串變量名稱和來自Place接口的所有方法。
public class PlaceImpl implements Place
{
public String name;
...
}
然后我創建一個對象
Place p = new PlaceImpl(placeName);
但是,當我嘗試訪問 p.name 時,出現錯誤“找不到符號”。 我可以通過這種方式訪問實例變量還是我只需要找到其他地方來存儲我的變量? 謝謝
更新:我無法更改 Place 界面,我必須使用 Place 類型的變量與我提供的其余代碼集成。
由於您無法更改Place
接口以添加getName()
方法,因此請維護一個Map<Place,Name>
。
enum PlaceNameMap implements Function<Place,Name>, Supplier<Place> {
INSTANCE;
private Map<Place,String> map = new HashMap<>();
public Place createPlace(String name) {
PlaceImpl result = new PlaceImpl(name);
add(result, name);
return result;
}
public void add(Place p, String name) {
map.put(p, name);
}
public String apply(Place p) {
return map.get(p);
}
}
您可以通過首先將類型PlaceImpl
為p
來訪問name
。 例如,將name
分配給 String 變量myName
:
String myName = ((PlaceImpl) p).name;
很抱歉回復太晚了,但我剛剛遇到了同樣的問題並想通了。
您走在正確的軌道上 - 如果您將代碼更改為:
PlaceImp p = new PlaceImp(placeName);
您會發現您的代碼將起作用,因為您的靜態類型現在是 PlaceImp,而 PlaceImp 包含您正在尋找的實例變量作為公共元素。
另一方面,如果您的靜態類型是 Place(如您的示例代碼中所示),則它不包含名為 'name' 的元素,因此您無法訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.