Java 接口和返回类型
考虑我有以下接口:
public interface A { public void b(); }
但是,我希望实现它的每个类对方法b()具有不同的返回类型。
例子:
public class C {
public C b() {}
}
public class D {
public D b() {}
}
如何定义我的接口,以便实现这一点?
考虑我有以下接口:
public interface A { public void b(); }
但是,我希望实现它的每个类对方法b()具有不同的返回类型。
例子:
public class C {
public C b() {}
}
public class D {
public D b() {}
}
如何定义我的接口,以便实现这一点?
如果返回类型必须是实现接口的类的类型,则所需的类型称为 F 有界类型:
public interface A<T extends A<T>>{ public T b(); }
public class C implements A<C>{
public C b() { ... }
}
public class D implements A<D>{
public D b() { ... }
}
换句话说,是声明一个类型参数,该参数将采用实现的每个具体类型的值。这通常用于声明诸如或类型良好的方法之类的内容。作为另一个例子,java.lang.Enum
使用它来声明每个枚举的继承方法仅适用于该特定类型的其他枚举。A
T
A
clone()
copy()
compareTo(E)
如果您经常使用此模式,则会遇到需要键入 .乍一看,它似乎很明显是1,但你实际上需要声明一个方法,实现者必须简单地实现为。this
T
abstract T getThis()
return this
[1]正如评论者所指出的那样,可以做一些偷偷摸摸的事情,比如如果,并适当地合作。方法的存在使得它更加清楚地表明,它正在规避接口作者的意图。X implements A<Y>
X
Y
T getThis()
X
A
泛 型。
public interface A<E>{
public E b();
}
public class C implements A<C>{
public C b(){
return new C();
}
}
public class D implements A<D>{
public D b(){
return new D();
}
}
搜索泛型以获取更多详细信息,但是(非常)基本上,正在发生的事情是将 的类型留给实现分支( 和 )。A
E
C
D
所以基本上A不知道(也不必知道)在任何给定的实现中E可能是什么。