[英]Java generic interface with type constraint vs c# generics
我遇到了一些类似于以下的Java代码:
public interface ITest<T1 extends IOne,T2 extends ITwo> {
boolean handle(T1 value1);
boolean handle(T2 value2);
}
public interface IOne {}
public interface ITwo {}
然后执行ITest:
public class Test implements ITest {
@Override
public boolean handle(IOne value1) {
return false;
}
@Override
public boolean handle(ITwo value2) {
return false;
}
}
请注意,“测试实现ITest”中缺少类型声明。 来自ac#世界,这让我感到惊讶,因为您无法在c#中做到这一点。 您将必须编写如下内容:
public class Test : ITest<IOne, ITwo>
我知道Java泛型与c#泛型有很大不同,但我想更好地理解Java代码中发生的事情,这些代码允许上述代码进行编译? 它是编译器的类型推断吗? 是否将原始类型IOne和ITwo用于Test类? http://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html
谢谢。
当Java编译时
T1 extends IOne
它将所有T1实例替换为IOne
所以
public boolean handle(T1 value1) {
return false;
}
变
public boolean handle(IOne value1) {
return false;
}
所以实际的接口Itest是
public interface ITest {
boolean handle(IOne value1);
boolean handle(ITwo value2);
}
这样做是因为T1的实例将始终能够分配给IOne,而T2的实例将始终能够分配给ITwo。
在编译Test时,它正在寻找与接口中的具体方法匹配的方法,并且不会抱怨,因为它会找到满足其所需内容的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.