【问题标题】:Accessing instance variables in implemented class在实现的类中访问实例变量
【发布时间】:2019-02-27 17:02:34
【问题描述】:

我正在完成一项任务,并为我提供了一个名为 Place 的界面。 它有几个定义的方法,没有变量。 我创建了一个实现 Place 的类,它包含一个字符串变量 name 和来自 Place 接口的所有方法。

public class PlaceImpl implements Place
{
    public String name;
    ...
}

然后我创建一个对象

Place p = new PlaceImpl(placeName);

但是,当我尝试访问 p.name 时,我收到错误“找不到符号”。 我可以以这种方式访问​​实例变量,还是只需要找到其他地方来存储我的变量? 谢谢

更新:我无法更改 Place 接口,我必须使用 Place 类型的变量来与我提供的其余代码集成。

【问题讨论】:

  • 如果您需要访问name,那么您不能使用Place 类型的变量,因为Place 没有name
  • 不幸的是,我必须使用 Place 类型的变量来与我提供的其余代码集成。看来我得另谋出路了。谢谢
  • 向你的接口添加一个getName() 方法,在你的实现中实现它,然后使用它。如果需要直接访问对象中的变量,则无法通过接口访问。
  • 请不要再随意提出新的限制和约束。这使得回答几乎不可能。
  • 那么你到底需要这个名字做什么?

标签: java instance-variables implements


【解决方案1】:

您走在正确的轨道上 - 如果您将代码更改为:

PlaceImp p = new PlaceImp(placeName);

您会发现您的代码可以工作,因为您的 静态类型 现在是 PlaceImp 并且 PlaceImp 包含您正在寻找的实例变量作为公共元素。

另一方面,如果您的静态类型是 Place(如您的示例代码中所示),它不包含名为“name”的元素,因此您无法访问它。

【讨论】:

    【解决方案2】:

    由于不能更改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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      您可以通过第一次将PlaceImpl 转换为p 来访问name。 比如将name赋值给String变量myName

      String myName = ((PlaceImpl) p).name;
      

      很抱歉回复晚了,但我刚刚遇到了同样的问题并想通了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-21
        • 1970-01-01
        • 1970-01-01
        • 2022-08-11
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多