В частности, вы получаете предупреждение, потому что вам нужно квалифицировать Comparable
с аргументом типа в приведении.Так что у вас есть ((Comparable<Type>)value)
, где Type
- это (базовый тип) тип selectedValue
.
Однако, даже если вы сделаете это, вы все равно получите предупреждение.На этот раз проблема в том, что <Type>
«уходит» при компиляции, что означает, что нет никакого способа гарантировать, что класс действительно Comparable<Type>
.Вы можете только проверить, является ли объект Comparable
.Рассмотрим следующее тестовое приложение:
class Type{
public int x = 0;
}
class Other implements Comparable {
public int compareTo(Type obj) {
return obj.x;
}
}
class Test {
public static void main(String[] args) {
Other obj1 = new Other();
Object value = obj1;
String selectedValue = "";
if (value instanceof Comparable) {
System.out.println(((Comparable<String>) value).compareTo(selectedValue));
}
}
}
Код компилируется с предупреждением, поскольку, хотя value
равно Comparable
, его нельзя сравнивать с String
с.Последнее все еще предпочтительнее, так как вы можете по крайней мере проверить, что аргумент имеет «ожидаемый» тип.
В конце вам понадобится @SuppressWarnings
.
Обратите внимание, что еслиВы хотите, чтобы это работало с любым классом.Тогда вы можете также оставить все как есть (или использовать Comparable<Object>
, поскольку они (в данном случае) эквивалентны).С добавлением @SuppressWarnings
, очевидно.