我有以下设置:
public class SomeUtil {
public static void doSmth(boolean b) {
System.out.println("boolean");
}
public static void doSmth(String b) {
System.out.println("string");
}
public static void doSmth(Object b) {
System.out.println("object");
}
}
public interface SomeCl {
<T> T getAttribute(Object var1);
}
public class SomeClImpl implements SomeCl {
@Override
public <T> T getAttribute(Object var1) {
Boolean o = Boolean.TRUE;
return (T)o;
}
}
public class Demo {
public static void main(String[] args) {
SomeCl someCl = new SomeClImpl();
SomeUtil.doSmth(someCl.getAttribute(Boolean.TRUE));
}
}
当我运行Main方法时,执行失败,并引发ClassCastException:
线程"main"中的异常:在Demo2.main(Demo2.java:4)中,无法将类java.lang.Boolean转换为类java.lang.String(java.lang.Boolean和java.lang.String在加载器‘bootstrap’的模块java.base中)
所以问题是:为什么JVM试图将布尔值转换为字符串?为什么不反对呢?
附注:请不要建议我在调用someCl.getAttribute(arg)个方法之前手动强制转换它,或者像调用someCl.</</DesiredType/>/>getAttribute(arg)那样调用它