【问题标题】:how to see the class name containing the actual code如何查看包含实际代码的类名
【发布时间】:2017-03-15 17:19:54
【问题描述】:
package a;
public class A {
  public String toString() {
    // return "I am an a.A"; is too primitive ;) 
    return "I am an " + getClass().getName(); // should give "a.A"
  }
}

--

package a;
public class X extends A {
  public static void main(String[] args) {
    X test = new X();
    System.out.println(test);  // returns "I am an a.X"
  }
}

我也试过this.getClass()super.getClass()。如何获得实际编码 toString() 和 getClass() 的类名? (a.A)

这只是一个简化的示例,我的意思是如何避免在第一个文件(A.java)中对基类名称进行硬编码

【问题讨论】:

  • 已经在这里回答了:link
  • @Coder ACJHP:不是真的,或者我没找到。无论如何,问题有所不同。

标签: java


【解决方案1】:

改变:

getClass().getName()

进入

A.class.getName()

【讨论】:

  • this.class 不会做 - “类文字是一个表达式,由类、接口、数组或原始类型的名称后跟一个 `.'和令牌类。它评估为 Class 类型的对象,即命名类型(或 void)的类对象。“
【解决方案2】:

只需遍历所有超级

public String toString() {
  Class cl = getClass();
  while (cl.getSuperclass() != Object.class) 
    cl = cl.getSuperclass();
  return cl.getName();
}

【讨论】:

    【解决方案3】:
    package a;
    public class A {
      public String toString() {
        return "I am an " + A.class.getName();
      }
    }
    

    应该可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-24
      • 2013-12-03
      • 2011-07-12
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      相关资源
      最近更新 更多