0

Хорошо, да, название путается. Но это то, что я хочу выполнить:Как вернуть общий тип, имея еще один общий тип в качестве параметра, оба из которых необходимы для реализации взаимодействия?

Я хочу вернуть список, содержащий элементы типа C. И я хочу, чтобы метод получал переменную типа R. И C должен быть классом, реализующим интерфейс, т.е. C_interface, а R должен быть классом, реализующим другой интерфейс, то есть R_interface.

В моем мире этот метод голова должна работать:

public <C implements C_interface, R implements R_interface> List<C> method_name(R r) 

Но это не так. Я получаю следующие ошибки в Eclipse:

Multiple markers at this line 
    - Syntax error on token "implements", , 
    expected 
    - R cannot be resolved to a type 
    - Syntax error on token "implements", , 
    expected 
    - C cannot be resolved to a type 

Если я удалю реализует интерфейсную часть, например:

public <C, R> List<C> method_name(R r) 

Все работает отлично. И я думаю, я мог бы просто проверить тип внутри метода. Но если это сделать первым, это будет намного лучше.

+6

Заменить «орудия» на «продолжения». [Ссылка] (https://docs.oracle.com/javase/tutorial/java/generics/bounded.html) – Makoto

+0

https://docs.oracle.com/javase/tutorial/java/generics/boundedTypeParams.html – Radiodef

+0

возможно дубликат [Что означает «T extends Junk» означает в родовом классе в Java?] (http://stackoverflow.com/questions/13632916/what-does-t-extends-junk-mean-in-a-generic- class-in-java) – CKing

ответ

1

Вы должны использовать extends вместо орудий. Это работает:

public class DoubleParamGeneric { 

    public <C extends CInterface, R extends RInterface> List<C> m(R r) { 

     List<C> result = null; 

     // Process here 

     return result; 

    } 
} 

public interface CInterface { 

} 

public interface RInterface { 

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