繁体   English   中英

是否可以在Java中使用扩展的形式类型参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM