Java 将对象强制转换为字符串时ClassCastException,但将对象强制转换为自定义类时没有ClassCastException
看来我不理解Java中强制转换的基本概念。请解释为什么第一行有效,第二行无效Java 将对象强制转换为字符串时ClassCastException,但将对象强制转换为自定义类时没有ClassCastException,java,Java,看来我不理解Java中强制转换的基本概念。请解释为什么第一行有效,第二行无效 public int compareTo(Object o) { Person p = (Person) o; //no warning String s = (String) o; //warning about class cast exception return 0; } 这里有什么区别?为什么允许将对象投射到人?尝试反转: public int c
public int compareTo(Object o) {
Person p = (Person) o; //no warning
String s = (String) o; //warning about class cast exception
return 0;
}
这里有什么区别?为什么允许将对象投射到人?尝试反转:
public int compareTo(Object o) {
String s = (String) o; //no warning
Person p = (Person) o; //warning about class cast exception
return 0;
}
你会在第二次施展时得到同样的警告。这是因为声纳过梁关心上下文:它假设如果第一次施放成功,第二次将失败。尝试反转:
public int compareTo(Object o) {
String s = (String) o; //no warning
Person p = (Person) o; //warning about class cast exception
return 0;
}
你会在第二次施展时得到同样的警告。这是因为sonar linter关心上下文:它假设如果第一次施放成功,第二次将失败。我认为编译器会允许这样做,正如您所说,这只是一个警告。对字符串的强制转换只有在其实际为字符串的情况下才会成功。在您的情况下,只有当o为null时,您的代码才会成功,这可能就是您收到此警告的原因。我认为编译器会允许这样做,因为您说过这只是一个警告。对字符串的强制转换只有在其实际为字符串的情况下才会成功。在您的情况下,只有当o为null时,您的代码才会成功,这可能是您收到此警告的原因。可能是因为
对象o
是人
?它不能同时是String
,因为String
是最后一个类,Person
不能扩展它。是的,亚历克斯说的。因此编译器可以保证您的强制转换将失败,因此它不允许这样做。可能是因为objecto
是Person
?它不能同时是String
,因为String
是最后一个类,Person
不能扩展它。是的,亚历克斯说的。因此编译器可以保证您的强制转换将失败,因此它不允许这样做。