【问题标题】:Can I assign a Dictionary as an attribute of another class instance?我可以将字典分配为另一个类实例的属性吗?
【发布时间】:2015-04-20 07:19:40
【问题描述】:

我有一个名为 Node 的类。对于 Node 的一个实例,我想分配一个字典作为属性来跟踪 Node 对象的邻居以及将 Node 连接到其每个邻居的路径的权重。

例子:

1->2---7(节点1连接到节点2,权重为7)

1->3---5(节点1连接到节点3,权重为5)

...

我想创建一个 Node 对象“1”,它有一个 Dictionary 属性,(key, value) 等于 (neighbor, weight)。

在这种情况下,1 的字典应该是 [2:7, 3:5]。

import java.util.Dictionary;

public class Node{

    public int i;
    public Dictionary neighbors = new Dictionary();
    public int w;

    public Node(int i, int j, int weight){
        this.i = i;
        this.neighbors = neighbors.put(j, weight);

    }   
}

当前错误:./Node.java:6:错误:字典是抽象的;无法实例化

这可能吗?如果是这样,它会是什么样子?

【问题讨论】:

    标签: java object dictionary


    【解决方案1】:

    From the docs:

    Dictionary 类是任何类的抽象父类,例如 Hashtable,它将键映射到值。

    注意:此类已过时。新的实现应该实现Map 接口,而不是扩展这个类。

    使用Map

    Map<Node, Integer> neighbors = new HashMap<>();
    
    // ...
    
    neighbors.put(j, weight);
    

    【讨论】:

      【解决方案2】:

      您不能实例化抽象类。这并不意味着你不能让它成为实例变量的类型。

      但是,您需要实现 Dictionary 的子类,而不是 Dictionary 本身。

      public Dictionary neighbors = new Dictionary();
      

      应该是

      public Dictionary neighbors = new DictionarySubClass();
      

      另外:最好将实例变量保持私有,并使用 mutator(getter 和 setter)来操作它们。

      【讨论】:

      • 没有像DictionarySubClass 这样的class。但是快速浏览the javadoc 表明了两件事。 1) Dictionary 的唯一实现是 Hashtable 和 2) Dictionary 已弃用。
      • @BoristheSpider:这只是一个如何处理抽象类的例子,这是他遇到的麻烦。据我所知,Josh 创建了一个 DictionarySubClass,所以我不能说没有。这并不意味着“复制并且它会起作用”的解决方案,而是“这是如何......的想法”
      • 当然,这可能都是真的,但我假设不知道abstract class 是什么的人很可能不会自己实现Dictionary。您已经在这里回答了 XY 问题并忽略了根本问题。在回答初学者的问题时,有助于尝试制定意图
      猜你喜欢
      • 2012-02-04
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2013-05-23
      • 1970-01-01
      相关资源
      最近更新 更多