我遇到以下与泛型有关的问题。我有以下几点:
InterfaceA为:
public interface InterfaceA {
public <T extends DTOInterface> Object methodName (T dto) {}
}
DTOInterface只是一个空接口。
那么我的实现将是:
public class ImplementationA implements InterfaceA {
public Object methodName(DTOImplementation dto) {
return null;
}
}
DTOImplementation只是实现DTOInterface的类。
之所以失败,是因为ImplementationA中的方法未被识别为InterfaceA中该方法的有效实现。
但是,如果我在接口级别定义参数,即
public interface InterfaceA **<T extends DTOInterface>** {
public Object methodName (T dto) {}
}
然后将实现定义为:
public class ImplementationA implements **InterfaceA<DTOImplementation>** {
public Object methodName(DTOImplementation dto) {
return null;
}
}
确实有效。该方法被认为是有效的实现。
有人知道为什么会这样吗?
第一个声明说,为了实现InterfaceA
,子类需要提供一种方法methodName
,该方法适用于方法调用者选择的任何T
扩展类型。换句话说,是调用者可以选择的参数;实现的类不会选择它。因此,当您提供尝试选择for的特定值并仅实现该值的实现时,编译器将拒绝您的程序。DTOInterface
T
methodName
InterfaceA
T
methodName
另一方面,第二个声明是一个接口,该接口允许实现者为该特定值提供特定的值,T
并且仅为该特定的选择实现其方法。ImplementationA
选择InterfaceA
仅针对()的一个特定子类型实现DTOInterface
,DTOImplementation
并仅针对的选择提供一种方法T
。很好
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句