我有一个类似于 -
的界面层次结构interface Type
{
Type copy();
};
interface SubType extends Type
{
};
interface SubSubType extends SubType
{
};
具体课程
public class Concrete implements SubSubType
{
@Override public Concrete copy() { return new Concrete(); }
}
我希望能够在Type上调用copy()并获取Type返回,在SubType上调用copy()并获取SubType,等等。这是否可以实现?可能有仿制药?
提前致谢。
答案 0 :(得分:5)
像这样:
public interface Type {
public Type copy();
}
public interface SubType extends Type {
public SubType copy();
}
public class Concrete implements Type {
@Override
public Concrete copy() {
return new Concrete();
}
}
public class SubConcrete implements SubType {
@Override
public SubConcrete copy() {
return new SubConcrete();
}
}
public static void main(String[] args) {
Type type = new Concrete();
SubType subType = new SubConcrete();
Type newType = type.copy();
SubType newSubType = subType.copy();
}
答案 1 :(得分:-1)
我想你可以去
interface <T extends Type> Type {
T copy();
}
interface SubType extends Type<SubType> {
// any extra methods here
}
然后,实现将是
public class Concrete implements SubType {
public SubType copy() {
// code here
}
}
对于记录,在不复制任何内容时调用方法copy()是一个非常糟糕的主意。
编辑:更正了以下代码。为简单起见,SubXXX接口作为内部类放入,实际上这不太合理。显然我需要切换订单。杜!
public interface Type<T extends Type<?>> {
T copy();
public interface SubType<T extends SubType<?>> extends Type<T> {
}
public interface SubSubType extends SubType<SubSubType> {
}
}
并且,实现可能如下所示:
class Concrete implements SubType<Concrete> {
@Override
public Concrete copy() {
return new Concrete();
}
}
这确实看起来很混乱,我更喜欢(并且只是投票)@Tim Pote回答。