预先感谢您的帮助。
首先,我认为我想做的事情是不可能的,但我想我还是可以问。我有一个带有方法 bar 的抽象类 foo 。我有几个类扩展了这个类,但没有一个类重写方法 bar (尽管都经常调用 bar )。我正在尝试调试一个问题,并想打印出调用 bar 的类的名称。因此,如果类 temp 扩展 foo 并调用 bar,则会打印出“temp”。
一种方法是为每个扩展 foo 的类重写 bar 方法,但这会有点痛苦,因为它还会实例化 foo 中的私有(private)变量。因此,我需要单独的方法来实例化 foo 中私有(private)的每个变量,以覆盖 temp 中的 bar。
我想做的是这样的事情
System.out.println(Class.getSimpleName());
但我不能这样做,因为 getSimpleName() 不是静态方法,因此可以在无法实例化的内容中调用。另一种方法是使 foo 成为一个普通类(即不是抽象类)。但是,我真的不想这样做。
无论如何,我可以做我想做的事,还是我必须“咬紧牙关”?
编辑: 此代码是 Android 应用程序的一部分。
最佳答案
你可以这样做,
this.getClass().getSimpleName();
这只会打印对象(子类)的类名,而不是 Foo 本身。
它之所以有效,是因为 this
引用了对象(属于具体子类),而不是它所使用的类本身(在本例中为 Foo)。
关于Java:在抽象类中创建获取扩展类名称的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32198240/