У меня есть класс:Как узнать, какой класс называется статическим методом?
class Superclass { static List list() { ... } }
и подклассы:
class Subclass extends Superclass { ... }
class Subclass2 extends Superclass { ... }
Я хочу, чтобы вызвать list
метод, как это: Subclass.list()
или Subclass2.list()
, и сделать что-то другое, на основании которого подкласс вызвавшего его ,
Есть ли способ определить, какой подкласс вызывает метод list
?
Примечание: Я не хочу переопределять метод list
в каждом из подклассов.
ОБНОВЛЕНИЕ: Все говорят, что это плохой дизайн, и в большинстве случаев я думаю, что это будет так, но я не думаю, что это в моем случае. Мой ORM определяет методы, которые принимают в java.lang.Class
. Я хочу предоставить сокращение для своих методов ORM, чтобы я мог сказать User.list(...)
вместо ORM.list(User.class, ...)
.
переопределение в подклассах, кажется, как правильно делать. Почему вы не хотите этого делать? –
@ Oli - метод Superclass.list в основном либо будет вызывать getFromDatabase (Subclass.class), либо getFromDatabase (Subclass2.class) и т. Д. Я хочу, чтобы любые классы, которые были получены из «Суперкласса», чтобы иметь возможность сказать 'Subclass.list()', чтобы просто получить список своего типа из базы данных. 'list' - не единственный метод' Superclass', поэтому я не хочу переопределять 5 разных методов в каждом подклассе. – Kyle
@Kyle: вместо некоторого простого шаблона в каждом производном классе вам понадобится поддерживать кучу проверок типа 'if-else' в каждом методе базового класса. Это безумие! –