2014-12-17 4 views
1

Как вы устанавливаете, что тип параметра метода расширяет определенный класс и реализует определенный интерфейс?Как вы навязываете, что тип параметра метода расширяет определенный класс и реализует определенный интерфейс?

+0

возможно дубликат [Как передать несколько параметров универсальных при удлинении общего класса] (http://stackoverflow.com/questions/20716651/how-to-pass-multiple-generic-parameters-when-extending -a-generic-class) – khelwood

ответ

0
/* 
     A method that will only accept a parameter that : 
     extends SomeClass , AND implements SomeInterface . 
    */ 
    private < T extends SomeClass & SomeInterface > void someMethod (T parameter) 
    { 
     // do something ... 
    } 
+1

Я бы предложил дать ответ в первом абзаце, а затем продолжить объяснение. Кроме того, использование идентификаторов, таких как 'CLASS' и' INTERFACE', вероятно, будет недооценено. Я бы предпочел использовать метасинтатические переменные типа 'Foo',' Bar' и 'Baz' или просто' A', 'B',' C' или что-то менее надуманное. Но кроме этого +1 –

+0

Да, этот ответ правильный, но трудно найти, какой бит является фактическим ответом. Это один лайнер, похороненный прямо в конце кода, а остальное - пух. Некоторые объяснения были бы хорошими. Рад, что имена идентификаторов были исправлены. –

7

Использование & создать союз:

<T extends Foo & Bar> 

Все, что после первого типа должен быть интерфейс.

0
class MyClass {} 
interface MyInterface {} 

public <T extends MyClass & MyInterface> void myMethod(T param) {} 
Смежные вопросы