Предположим, что у меня есть класс с именем NodeList
с двумя полями, называемый value
(тип Object
) и index
(тип int
). NodeList
реализует интерфейс под названием Copiable
с помощью одного метода, который называется copyNotSyncronized()
.Инициализация дженериков в Java
Я хочу, чтобы версия copyNotSincronyzed()
NodeList
признать, если this.value
реализует Copiable
и, если это произойдет:
- Использование
copyNotSincronyzed()
наthis.value
и ... - ... построить новый
NodeList
объект, который естьthis.value.copyNotSincronyzed()
как полеvalue
.
Я попытался написать код и утонуть в красном подчеркивании. После этого я знаю две вещи: мой Eclipse действительно ненавижу меня, и мне все еще нужно разобраться, как использовать дженерики в Java.
Какие ошибки я сделал?
public class NodeList implements Copiable {
int index;
Object value;
public NodeList(Object value, int index){
[...]
}
NodeList copyNotSincronyzed(){
NodeList copied;
if( onArray.findPositionsOfElement(this.value.getClass().getInterfaces() , this.getClass().getInterfaces()[0])[0] !=-1 )
// aka if this.value implements the same interface of this class (aka Copiable)
{
// Following line features three errors:
// Incorrect number of arguments for type Class<T>; it cannot be parameterized with arguments <T, Copiable>
// T cannot be resolved to a type
// Syntax error on token "implements", , expected
Class<T implements Copiable> copiedObject = this.value;
copiedObject=copiedObject.copyNotSincronyzed();
copied = new NodeList(copiedObject , this.index);
}
else copied = new NodeList(this.value, this.index);
}
}
«Копируемая» - это опечатка. Вы имели в виду называть его «Copyable»? (править) 'Sincronyzed' тоже. lolz –
Err ... да. Извините, английский не мой первый язык. – Argonath