繁体   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