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:在抽象类中创建获取扩展类名称的方法的主要内容,如果未能解决你的问题,请参考以下文章