这似乎是一个新鲜的问题,但是最后一次我使用
Java,语言没有泛型.我有一个类层次结构(名称更改为尽可能广义):
public abstract class AbstractBase { .... }
public class ConcreateSubA extends AbstractBase { .... }
public class ConcreateSubB extends AbstractBase { .... }
...
public class ConcreateSubZZ9PluralZAlpha extends AbstractBase { .... }
...
我正在尝试清理一些遗留代码,有一个地方可以通过泛型将一吨重复的重复数据分解成单个例程. (我正在考虑泛型,因为当这个例程被调用时,它只需要操作一个具体的类.)
例程看起来像
public void someFunc()
{
another_function_call (Thing.concreteSpecialToken);
// could also be
// another_function_call (Thing.concreteSpecialToken());
// if methods are more feasible than fields
// Cannot use
// another_function_call (Thing().concreteSpecialToken());
// because creating instances of these types is a Major Operation[tm]
}
我正在抛出一个十亿行,但这是重要的一部分:someFunc()是参数类型(实际上是引用参数,但是没有一个是事情,所以没有推论).最终我需要获取一个特殊的令牌,这就是我变得模糊的地方.
令牌是每个具体类的巨大屁股唯一的字符串.它们是基于类的,而不是基于实例的.实际的令牌值被声明为每个子类中的私有静态final字段.
所以我需要使用基类的公共方法/字段(最终)到一个子类的私有静态字段.显然,我不能在基础中声明一个抽象的静态方法,因为这是没有道理的.如果数据是基于实例的,那么这将是微不足道的,在基类中有一个多态的getter,但是子类的东西是静态的.
我觉得我在这里缺少Java泛型的一个特性,但是除了在抽象基类中声明的东西之外,我不能使用Thing.whatever().我正在与Java的限制或我缺乏专门技术来弥补差距.我所做的一个似乎有希望的尝试也一直在类层次结构中有一大堆代码重复,定义了与完全相同的代码一遍又一遍的抽象方法,这是泛型应该有助于防止!