不,如果A是泛型类型,则无法执行。(Bozho对fast的回答是:),可能认为A是具体类型。
可行的方法如下。
abstract class Agent extends Blah<ConcreteA>{ void callAgent(); Agent() { ConcreteA.add(); }}
但这可能不是您想要的。
阅读您的评论后,听起来您真正想要做的是:
abstract class Agent<A extends SomeClassThatSupportsAdd> { void callAgent(); protected abstract A createNew(); Agent() { A a = createNew(); A.add(); }}
您的子类将必须重写
createNew()。
如果您仍然不喜欢它,可以看一下AspectJ,它可以让您做一些构造器魔术(请参阅spring如何实现@Configurable),但这会变得更加棘手,并使事情变得复杂。
另一种选择是Scala。Java不对静态方法进行继承,因此您无法获得参数化的模块(某些语言中的函数组,这称为函子…
ocaml)。但是,Scala支持确实允许参数功能多态继承的单例“对象”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)