2016-09-28 126 views
0

我尝试完成使用我的方法是否有可能在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我使用定义的类型,例如,字符串一切工作只是桃色,但与通用的符号无法解决。

我会如何实现这一目标?

回答

1

您需要指定您希望将通用的声明一样,内部使用泛型类型:

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)。