Не происходит автораспаковка в методе String.valueOf(), при использовании в качестве аргумента метода - возвращаемое значение обобщенного метода
Когда пытаюсь использовать в качестве аргумента метода String.valueOf()
, возвращаемое значение из обобщенного метода <T> T testMet1(int a)
, то получаю ошибку:
Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class [C (java.lang.Integer and [C are in module java.base of loader 'bootstrap') at test.main(test.java:4)`
Исходный код:
class test {
public static void main(String[] args) {
test2 tstOb = new test2();
String tstStr = String.valueOf(tstOb.testMet1(1));
}
}
class test2 {
@SuppressWarnings("unchecked")
<T> T testMet1(int a) {
Integer tstInt = 5;
return (T) tstInt;
}
}
То что возвращает метод <T> T testMet1(int a)
можно понять выполнив следующий код:
class test {
public static void main(String[] args) {
test2 tstOb = new test2();
Class tstCl = tstOb.testMet1(1).getClass();
System.out.print(tstCl);
}
}
class test2 {
@SuppressWarnings("unchecked")
<T> T testMet1(int a) {
Integer tstInt = 5;
return (T) tstInt;
}
}
Результат выполнения будет следующий:
class java.lang.Integer
Следовательно метод String.valueOf(tstOb.testMet1(1))
получает объект типа Integer
в качестве аргумента и должен вести себя так, как если бы в него напрямую передали данный объект, но такого не происходит.