Java:在抽象类中创建获取扩展类名称的方法

Posted

技术标签:

【中文标题】Java:在抽象类中创建获取扩展类名称的方法【英文标题】:Java: Within abstract class create method that gets name of extending class 【发布时间】: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 实例,它才能工作。 【参考方案1】:

你可以这样做,

this.getClass().getSimpleName();

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

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

【讨论】:

我注意到这个,“getClass().getSimpleName()”也可以。 是的。您始终可以在没有 this 关键字的情况下调用方法或字段。但是使用它会使代码更具可读性。

以上是关于Java:在抽象类中创建获取扩展类名称的方法的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 Python 中创建抽象类?

如何在 VueJS 中创建和扩展抽象类组件?

如何在 python 抽象类中创建抽象属性

Swift 语言中的抽象类

Java基础第三天--内部类

c ++如何在原始抽象类中创建一个接受派生类输入的函数