【问题标题】:Java: Within abstract class create method that gets name of extending classJava:在抽象类中创建获取扩展类名称的方法
【发布时间】:2015-08-25 07:43:12
【问题描述】:

提前感谢您的帮助。

首先,我不认为我想做的事是可能的,但我想我还是可以问。我有一个带有方法栏的抽象类 foo。我有几个类扩展了这个类并且没有一个覆盖方法栏(尽管都经常调用栏)。我正在尝试调试一个问题,并想打印出调用 bar 的类的名称。因此,如果一个类 temp 扩展 foo 并调用 bar,“temp”将被打印出来。

一种方法是为每个扩展 foo 的类重写 bar 方法,但这会有点麻烦,因为它还会在 foo 中实例化私有变量。因此,我需要单独的方法来实例化 foo 中的每个私有变量以覆盖 temp 中的 bar。

我想做的是这样的

System.out.println(Class.getSimpleName());

但我不能这样做,因为 getSimpleName() 不是静态方法,因此可以在无法实例化的东西中调用。另一种方法是使 foo 成为普通类(即非抽象类)。但是,我真的不想这样做。

我是否可以做我想做的事,或者我将不得不“咬紧牙关”?

编辑: 此代码是 android 应用程序的一部分。

【问题讨论】:

  • this 有帮助吗?您基本上会将其保留在抽象类中的 foo 方法中。
  • 您是否正在寻找类似this.getClass().getSimpleName() 的内容。这只会打印(子类的)对象的类名,而不是 Foo 本身。
  • 不,不会的。我应该指定我在 android 应用程序中使用这个 java 类。我正在编辑我的问题以反映这一点
  • @Codebender 就像一个魅力。如果您想添加答案,我会接受。为什么这对 Class.getSimpleName() 有效?
  • 因为getSimpleName 不是静态方法。您需要一个特定的Class 实例,它才能工作。

标签: java android abstract-class


【解决方案1】:

你可以这样做,

this.getClass().getSimpleName();

这只会打印(子类的)对象的类名,而不是 Foo 本身。

这是因为this 指的是对象(属于具体的子类)而不是类本身(在本例中为 Foo)。

【讨论】:

  • 我注意到这个,“getClass().getSimpleName()”也可以。
  • 是的。您始终可以在没有 this 关键字的情况下调用方法或字段。但是使用它会使代码更具可读性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 2016-07-22
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多