使用Java中的if语句检查类

时间:2014-04-08 21:09:49

标签: java class if-statement

我想知道是否有办法检查一个对象是哪个类的if语句。我需要这样的东西:

if(object.getClass().equals("class Circle")) return object.radius;

这在Java中是否可行?

3 个答案:

答案 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中,如果失败则无法编译。