请注意更新,我的问题没有明确阐述。对不起。使用Java泛型的接口/抽象类的构造函数
让我们假设我们有下面的代码:
class Foo extends/implements AnAbstractClass/AnInterface { /* to make sure the constructor with int as input is implemented */
Foo(int magicInt) { magicInt + 1; /* do some fancy calculations */ }
}
class Bar extends/implements AnAbstractClass/AnInterface { /* to make sure the constructor with int as input is implemented */
Bar(int magicInt) { magicInt + 2; /* do some fancy calculations */ }
}
class Factory<T extends/implements AnAbstractClass/AnInterface> {
int magicInt = 0;
T createNewObject() {
return new T(magicInt) // obviously, this is not working (*), see below
}
}
/* how it should work */
Factory<Foo> factory = new Factory<Foo>();
factory.createNewObject() // => Foo with magicInt = 1
Factory<Bar> factory = new Factory<Bar>();
factory.createNewObject() // => Bar with magicInt = 2
在(*)
位置,我不知道该怎么办。我怎样才能确保这样的签名的构造函数...(int magicInt)
被实现?我不能定义
具有一定签名的构造函数中的接口
interface AnInterface { AnInterface(int magicInt); }
一个抽象类,执行一定的构造
abstract class AnAbstractClass { abstract AnAbstractClass(int magicInt); }
这显然是缺失的要求在子类中实现构造函数:
abstract class AnAbstractClass { AnAbstractClass(int magicInt) {} }
内an interface或abstract class一个静态方法,它可以覆盖为
AnInterface
或AnAbstractClass
每个实现(我觉得一个工厂模式)
什么是要走的路?
我不明白你的问题是什么......你究竟想达到什么目的,为什么它不工作? –
我认为你想要的结果代码有些奇怪。 'SampleSource'具有扩展'SampleFactory'的参数。然后在'getCurrentSample()'中调用这个示例工厂来创建一个与'SampleFactory'应该具有相同类型的示例。所以创建一个样本给你一个样本工厂? – Timo
那么因为Java 8静态方法在接口中是允许的。 – Flown