2014-09-21 4 views
1

Рассмотрим следующие две строки:Как я могу указать, что объект реализует интерфейс в Java?

arr = (J[]) new Object[10]; 

public void add(J obj){ 

хочу здесь указать, что J реализует Сопоставимые так что я могу написать

while(arr[i] < obj) 

Как указать это?

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

public interface OrderedListADT<J> extends Iterable<J> { 

public class OrderedVector<J> implements OrderedListADT<J>{ 
+1

Что такое 'J'? Общий? Вы можете ограничить ограничения чем-то вроде '' – MadProgrammer

ответ

2

Если вы определяете его на уровне класса, то вы можете написать это:

public class OrderedVector<J extends Comparable<J>> implements OrderedListADT<J> 

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

Для дальнейшего добавления, класс, который реализует Comparable имеет только compareTo метод (который возвращает отрицательное число, ноль или положительное число меньше, равное или большее, чем, соответственно. Ява не перегружать операторы , поэтому не было бы места для символов меньшего или большего размера.

+0

Awesome, thanks –

3

Если он реализует Comparable, вы можете использовать его compareTo метод (данное выражение соответствующего типа). Синтаксиса нет, поэтому вы можете использовать операторы >, >=, < или <=, если экземпляр имеет тип Comparable (или иным образом).

0

Я думаю, нам нужно больше деталей, потому что непонятно, какова ваша ситуация. Однако предположим, что у вас есть класс MyClass (возможно, абстрактный класс), который не реализует Comparable, но там, где вы ожидаете, что некоторые подклассы этого класса будут внедрены Comparable.

public void add(MyClass obj) { 
    ... 
    ... 
    // We execute some logic, and if we get to this point, we can be sure that obj is 
    // *supposed* to be of a subclass that implements Comparable. 

    if (((Comparable)obj).compareTo(otherObj) < 0) { 

Как показано выше, вы можете использовать литой для обработки obj как Comparable, а затем вы можете использовать метод compareTo. (Вы не можете использовать < непосредственно на Comparable на Java.) Если наше предположение неверно, и obj действительно не является Comparable, тогда ClassCastException будет выброшен во время выполнения.

Вы также можете проверить заранее, как это:

if (obj instanceof Comparable) { 
     int comparison = ((Comparable)obj).compareTo(otherObj); 
     ... 
    } else { 
     doSomethingUnusualBecauseObjIsntReallyComparable(); 
    } 
Смежные вопросы