我想在一个接口中指定一个实现方法必须返回一个自己类型的类。例如,克隆方法:
let button = UIButton(type: UIButtonType.Custom) as UIButton
现在我可以致电:
interface MyArray{
MyArray clone();
}
interface MyVector extends MyArray{
// ... 1d-array specific methods
MyVector clone();
}
class MyDoubleVector implements MyVector{
//...
@Override
public MyDoubleVector clone(){
//...
return new MyDoubleVector(Arrays.copyOf(data));
}
}
我想强制MyArray的所有实现者都有一个返回与实现者相同类型的克隆方法。如果有一些内置的“元类型”表示“与此类/接口相同的类型”,我可以保存很多行:
MyVector vec1 = new DoubleVector(...);
MyVector vec2 = vec1.clone();
并且不必重新定义扩展接口的方法,以便调用vec1-> vec2克隆操作,如上所示。
Java是否有一些内置的构造用于执行此操作,或者是复制和粘贴大量样板代码只是java程序员的悲惨命运?
答案 0 :(得分:1)
我认为你需要的是F-Bound类型。您可以查看this个帖子以获得类似示例。
答案 1 :(得分:1)
您需要使用泛型来实现此目标
interface MyArray<A extends MyArray<A>> {
A clone();
}
interface MyVector<A extends MyVector<A>> extends MyArray<A> {
}
class MyDoubleVector implements MyVector<MyDoubleVector> {
//...
@Override
public MyDoubleVector clone(){
//...
return new MyDoubleVector(Arrays.copyOf(data));
}
}
为了澄清一点,您需要extends MyArray<A>
来阻止开发人员编写以下内容。
MyArray<Integer> mi = new SomeMyArray<>();
Integer i = mi.clone();
这样编译得很好,但显然应该在运行时失败。