我有一个抽象的Java类,它有一个应由具体子类初始化的散列码字段。我想使初始化方法抽象的,即,在子类中设置超类字段
abstract class A {
protected int hashcode;
// hashcode should be initialized in constructor
protected A() { hashcode = setHashcode(); }
abstract int setHashcode() {} // implemented by subclasses
}
但不幸的是不同的子类需要采取不同数量的参数为setHashcode
,例如,B类可能会使用它的两个字段和C类强权计算哈希码需要三个,但由于超级的调用必须是B的构造函数中的第一行,所以此方案不起作用。所以我想知道是否有不同的方式/设计模式来解决这个问题?
作为风格注:这是尴尬的有一个名为'setSomething()'方法不设置任何值,而是返回计算值。 'calculateHashcode'或'determineHashcode'可能会更好地表达方法的意图。 – 2012-04-10 03:35:35
您可能会在[此问题]中找到相关信息(http://stackoverflow.com/questions/7223435/java-call-base-method-from-base-constructor),以及[this question](http:// stackoverflow .com/questions/7477553/in-java-is-there-a-legal-reason-to-call-a-non-final-method-from-a-class-co)有用。 – 2012-04-10 03:37:48