如何知道属于attritube的类的名称

时间:2016-01-08 01:29:13

标签: java

让punt成为下一个变量

Point punt = p.point

其中p是A类的对象。 如何知道属性p.point的类的名称(即我需要一些打印A的句子?)

2 个答案:

答案 0 :(得分:2)

p.point.getClass().getSimpleName()

<强>更新

p.point.getClass().getCanonicalName()

获取类 A 的字段 point 类型的规范名称,即fully qualified name p 是此类 A 的实例。

现在,如果您想获得 p 是其实例的 A 类的简单名称,即&#34; A&#34;,则:

p.getClass().getSimpleName()

其他可能性,你想从A类本身内部知道A类的名称:

  • with java&lt; 1.7,只有静态参考,即:A.class.getSimpleName()
  • 从java 1.7开始,使用反射API:MethodHandles.lookup().lookupClass().getSimpleName()

答案 1 :(得分:0)

如果您需要获取类 A 的名称,那么您可以使用下一个表达式:

p.getClass().getName()

如果您需要从对象punt 中获取类 A 的名称,那么您不能。对象 punt 可以是类 A 的属性,也可以是许多其他不同类的属性。你不知道一个对象在里面是什么类。您需要直接访问对象 p 。让我用一个例子来解释:

public class Point {
    ....
    public String toString() {
        // from here, it's impossible to know what class is this object inside
    }
}    

public class A {
    public Point point;
}

public class B {
    public Point anotherPoint;
}

public static void main(String[] args) {
    A p = new A();
    B q = new B();

    p.point = new Point();
    q.point = p.point; // shared reference here!!
    ....
    Point punt = p.point; // p is an attribute of A and B at the same time!!
    System.out.println(p.getClass().getName()); // direct access to the "p" object
}