我想知道是否有办法检查一个对象是哪个类的if语句。我需要这样的东西:
if(object.getClass().equals("class Circle")) return object.radius;
这在Java中是否可行?
答案 0 :(得分:3)
instanceof
运算符应该可以解决问题:
if (object instanceof Circle ) {
return ((Circle) object).radius;
}
答案 1 :(得分:1)
使用instanceof
if(object instanceof Circle)
答案 2 :(得分:0)
最近,你要找的是instanceof
。然而,该公式表明,在强类型语言中缺乏对面向对象编程的理解:
//Start with no information about 'object'
if(object instanceof Circle) { //Figure out if it is a Circle
return object.radius; //If so, do something
}
实际上,在Java中,你应该已经知道你正在处理什么功能,至少在大多数情况下:
public void getRadius(Object o) {
//Any old object may not even be related to a geometric thing; o could be a network socket!
}
public void getRadiusBetter(Shape s) {
//Shapes may or may not have a radius, but at least we are talking about shapes
}
public void getRadiusBest(Circular c) {
//By definition, c would have the state for the object's radius
}
例如,我们可以将Circular定义为:
public interface Circular {
public double getRadius();
}
这可以保证任何Circular对象都能返回一个半径。通常,您希望以这种方式制定代码,利用强类型,而不是假设没有关于您正在处理的对象的信息(如在Javascript或其他弱类型语言中)。否则你可能会被困在制作许多if语句和错综复杂的逻辑,以确定你是否甚至可以询问你正在处理的对象的相应问题。在Java中,您可以随意进行合理的检查,但总是尽可能地了解您的对象。
记住,这个:
f(x:TypeA) => y:TypeB
可以用强类型语言保证,但不能用弱类型语言保证:
public TypeB f(TypeA x) { ... }
在JS中,你依赖于它所说的功能。在Java中,如果失败则无法编译。