2015-03-02 3 views
2

Я пытаюсь создать интерфейс, который реализует некоторые из моих классов. Хотя это отлично работает для одного типа T:Вложенный общий тип интерфейса

public interface AsyncResponse<T> { 
    void processFinish(T output); 
} 

Это позволяет использовать processFinish<String> и т.д.

Выполнение этой работы в общих списках, кажется, не. Или, по крайней мере, я не могу понять, как разрешить одно из следующих условий:

  1. Укомплектованный вывод LinkedHashSet.
  2. ArrayList мощность.

Я попытался следующие, но это не сработало:

public interface AsyncGenericResponse<T<X>>{ 
    void processFinish(T<X> output); 
} 

и

public interface AsyncGenericResponse<LinkedHashSet<T>{ 
    void processFinish(LinkedHashSet<T> output); 
} 

Ни одно из решений, казалось, работали. Как я могу это решить, и это возможно?

ответ

3

Общий тип только T, метод принимает LinkedHashSet<T>, но здесь нет «вложенного родового» в объявлении класса.

Следующий код компилируется нормально:

public interface AsyncGenericResponse<T>{ 
    void processFinish(LinkedHashSet<T> output); 
} 
+0

Кроме того, рекомендуется использовать '' Collection супер-тип вместо конкретного 'Set' или' list' если вам просто нужна коллекция, но дон Не хочу указывать точный тип на уровне параметра. – Blacklight

+0

@Matthijs Но в этом случае, пока он будет работать для ваших типов «List», но он больше не будет работать для типов, например «String»? – Unheilig

+0

Но нет ли возможности сделать так, чтобы в этом случае LinkedHashSet использовался как общий тип, который использует переменную? Как в моем интерфейсе, используя >? – Matthijs

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