2016-09-28 4 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 я использую определенный тип, например. Строка все работает просто peachy, но с общим символом нельзя разрешить.

Как бы это осуществить?

ответ

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

Смежные вопросы