Проблема заключается в том, что K
является типом, который расширяет Number
, но это неизвестный подкласс класса Number
, поэтому компилятор вызывает эту ошибку, поскольку Integer
- это только один конкретный подкласс из Number
, поэтому он не может сравниться с любыми потенциальными целевыми типами.
Предположим, что вы хотите явно указать его, чтобы скомпилировать его с помощью
public <K extends Number> K getValue(){
Integer a = new Integer(1);
return (K) a;
}
. Тогда, если вы его вызываете ожидая, что какой-либо подкласс класса Number
, кроме Integer
, вы получите ClassCastException
, именно этого компилятор хочет избежать:
Double d = getValue(); <-- throws ClassCastException
В качестве обходного пути вы можете определить свой метод, используя Number
как возвращаемый тип следующим образом:
public Number getValue() {
return new Integer(1);
}
К сожалению, в настоящее время невозможно достичь этого эффекта на уровне схемы.
Вы должны понять, как реализовать это на прикладном уровне.
Если это отношение
BLOCKQUOTE>LIKED
отличается от других отношенийLIKED
(т. е. отношения LIKED между парой меток других узлов), тогда вы можете назвать его как угодно и создать «ограничение существования свойства отношения» [115 ] на это.