[英]Is it possible to use an extended formal type parameter in java
我尝试完成使用方法中用于内部扩展接口的通用类型参数
例如
public interface IA<T> {
void someMethod(T);
}
public interface IB<T> {
T anotherMethod();
}
class AImpl<T extends IB<SomeGenericTypeIWantToUse>> implements IA<T> {
ISomeModule<SomeGenericTypeIWantToUse> module;
public void someMethod(T param) {
SomeGenericTypeIWantToUse myVariable = param.anotherMethod();
module.digest(myVariable);
}
}
public interface ISomeModule<T> {
void digest(T value);
}
public class SomeModuleImpl<T> implements ISomeModule<T> {
public void digest(T value) {
//...do something...
}
}
如果不是使用SomeGenericTypeIWantToUse,而是使用已定义的类型,例如String,则一切都正常运行,但是使用通用符号,则无法解析。
我该怎么做?
您需要像这样在泛型声明中指定要使用的泛型类型:
class AImpl<T extends IB<SomeGenericTypeIWantToUse>, SomeGenericTypeIWantToUse> implements IA<T> {
ISomeModule<SomeGenericTypeIWantToUse> module;
public void someMethod(T param) {
SomeGenericTypeIWantToUse myVariable = param.anotherMethod();
module.digest(myVariable);
}
}
因为您指定的是通用编译器需要显式地了解它,否则它将尝试将其解析为真实的类(因此,当您使用String时,它可以很好地工作,因为它可以解析String)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.