2014-12-08 4 views
-1

У меня проблема с попыткой приравнять интерфейс к классу, который реализует этот класс.Уравнение интерфейса с классом, который его реализует

У меня есть интерфейс, который называется SortedSetADTx.java У меня есть класс с именем BstSetKTUx.java

Теперь в моем главном классе у меня есть две переменные

private static SortedSetADTx<Automobilis> autoSet; 
private static BstSetKTUx<Automobilis> autoSetBst; 

и в одном из моей функции я хочу для этого:

autoSet = new BstSetKTUx(new Automobilis()); 
autoSetBst = autoSet; 

И я получаю сообщение об ошибке, что эти два являются несовместимыми типами. Причина, по которой я это делаю, хочу использовать функцию класса BstSetKTUx. Надеюсь, вы поймете мой вопрос, это очень сложно объяснить.

ответ

0

Допустим, что BstSetKTUx реализует SortedSetADTx, вы можете просто попробовать этот кусок кода:

autoSet = new BstSetKTUx<Automobilis>(new Automobilis()); 
autoSetBst = (BstSetKTUx<Automobilis>) autoSet; 

Основное изменение, которое я сделал здесь является приведение к BstSetKTUx<Automobilis>. Так как мы знаем, что autoSet содержит BstSetKTUx<Automobilis> (см. Первую строку моего отрывка), мы можем бросить, не проверяя сначала класс autoSet.

Если вы не знаете, что содержит autoSet, прежде чем пытаться отличить его от BstSetKTUx<Automobilis>, я рекомендую использовать оператор instanceof.

// given we don't know if autoSet contains a BstSetKTUx instance or not 
if(autoSet instanceof BstSetKTUx) { 
    // we can cast to BstSetKTUx without any problems 
    autoSetBst = (BstSetKTUx<Automobilis>) autoSet; 
} else { 
    // autoSet does not contain an instance of BstSetKTUx 
} 

Кроме того, это хорошая практика программирования, что вы всегда указывать аргументы типа одного класса (<Automobilis>), даже если вы вызываете конструктор. ;)

0

У вас есть следующие переменные:

SortedSetADTx<Automobilis> autoSet; 
BstSetKTUx<Automobilis> autoSetBst; 

autoSet Обратите внимание, что имеет тип SortedSetADTx но не BstSetKTUx. Однако autoSetBst имеет тип BstSetKTUx, , а также типа SortedSetADTx, начиная с BstSetKTUx осуществляет SortedSetADTx. Таким образом, вы не можете назначить autoSet для autoSetBst, но вы можете сделать это наоборот:

autoSetBst = new BstSetKTUx(new Automobilis()); 
autoSet = autoSetBst; 
1

Вы можете попробовать типажи autoset, так как это не относится к типу BstSetKTUx ... Вы можете только приравнивать объекты, относящиеся к одному классу. т.е. autoSetBst = (BstSetKTUx<Automobilis>)autoset;

+1

На самом деле это будет autoSetBst = (BstSetKTUx ) autoset; – Francis

+0

Я бы порекомендовал редактировать ваше сообщение;) – mezzodrinker

+0

Я попытался это пару раз, но он, похоже, не появился. :/Я не уверен, что это потому, что редактирование нуждается в одобрении или что-то в этом роде. – Francis

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