簡體   English   中英

訪問已實現類中的實例變量

[英]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);
    }
}

您可以通過首先將類型PlaceImplp來訪問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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM