2014-02-18 6 views
5

Я не думаю, что это дубликат Check if a generic T implements an interface, но это может быть (??).Как определить общий класс, реализующий два интерфейса?

Итак, я хочу создать общий интерфейс, который позволяет только объекты, реализующие два интерфейса. Alike является интерфейсом costum.

public interface AbstractSortedSimpleList<T extends Comparable<T>, Alike> {} 

Если я правильно понимаю, Java в настоящее время пытается создать общий интерфейс AbstractSortedSimpleList<T,Alike>, который не точно, что я хочу достичь. Я хочу AbstractSortedSimpleList<T>, где T должен реализовать как Comparable<T>, так и Alike.

Позже, я хочу, чтобы новый класс

public class SortedSimpleList<T> implements AbstractSortedSimpleList<T> {} 

Дело в том, чтобы создать class SortedSimpleList<T> где T должен быть реализации вышеупомянутых интерфейсов. Но мой код не работает очень хорошо.

+0

http: // stackoverflow.com/questions/745756/java-generics-wildcarding-with-multiple-classes – selalerer

+0

Правильный ответ использует границы, но другой вариант делает Alike для расширения Comparable –

ответ

5

Вы можете дать несколько оценок для параметра типа:

public interface AbstractSortedSimpleList<T extends Comparable<T> & Alike> 

Тогда ваш SortedSimpleList будет, как:

class SortedSimpleList<T extends Comparable<T> & Alike> implements AbstractSortedSimpleList<T> {} 

См JLS §4.4:

Каждый тип переменной объявлен как тип параметр имеет оценку. Если для переменной типа не объявлена ​​никакая граница, предполагается, что Object. Если граница объявлена, она состоит либо из:

  • один тип переменной T, или

  • класс или интерфейс типа T, возможно, с последующим типами интерфейсов I1 & ... & В.

Примечание:

Вы не можете иметь такие многочисленные оценки для групповых символов, хотя. Это только для параметров типа.

Ссылки:

5

Используйте некоторые общие границы с & нотации

interface AbstractSortedSimpleList<T extends Comparable<T> & Alike> { 

Смотрите официальный Java учебник по нескольким часам, here.

+0

'public class SortedSimpleList реализует AbstractSortedSimpleList {}' this now дает _Bound несоответствие: тип T не является допустимым заместителем для ограниченного параметра & Alike> типа AbstractSortedSimpleList _ –

+0

@hewo Использование 'T' в' SortedSimpleTest' является ** новым ** типом переменная. Вы также должны указать границы на нем. В противном случае он не соответствует границам, которые ожидает 'AbstractSortedSimpleList'. –

+0

Редактировать: Да, я просто положил 'T extends Comparable & Alike' в неправильное' <> 'hehe. Спасибо :) –

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