我有
interface Module {
List<String> parse();
}
该接口(interface)有多种实现方式,在应用程序中我希望有一个 HashSet<Module>
这确保每个模块只有一个实例。为此,我需要一个合适的 hashCode
每个类(class)。正确实现hashCode
将为一个模块类的各种实例返回相同的常量,但为不同的模块返回不同的常量。
为了创建一个好的设计解决方案,我想根据模块名称计算 hashCode,例如:
public int hashCode() {
return ConcreteModule.class.getName().hashCode();
}
但是这个代码对于接口(interface)的每个实现都是相同的...我的想法是创建一个实现哈希码的抽象模块,但是是否有可能到达扩展这个抽象类的类的名称? 喜欢:
public abstract class AbstractModule implements Module {
public int hashCode() {
// get the class name of class extending the abstract module
// and return hashcode of its string name
}
}
然后
public class ConcreteModule extends AbstractModule implements Module {
// implementation of parse() no need to create hashcode for each module
}
您是否建议为每个模块创建 hashCodes,或者是否可以创建我正在尝试的东西?欢迎任何建议或意见。提前致谢
最佳答案
经过一番思考,您想要做的是将映射从类中删除,而不是实例......
HashMap<Class<? extends Module>, <Module>> mymap = .....
那么每种类类型只有一个值。您可以放置:
mymap.put(module.class(), module);
关于java - 来自反射的哈希码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364724/