Определение подкласса из множества подклассов Java
У меня есть интерфейс Tree
и абстрактный класс RBTree
который реализует этот интерфейс. У меня также есть несколько классов Tree1
...Tree9
которые расширяют этот абстрактный класс.
Я написал тестовый модуль, где я хочу сделать что-то вроде этого:
public void testRandom(RBTree tree){
for(int i = 0; i < 10; i++){
rbTree = new Tree1(); //if the tree in the parameter was of instance Tree1
rbTree = new Tree2(); //if the tree in the parameter was of instance Tree2
//etc.
/**
* do something with rbTree
*/
}
}
Можно ли сделать это без использования цепочки операторов if (или переключателя) с большим количеством instanceof()
?
(примечание: я не могу ничего изменить в дизайне, я знаю, что он не совсем оптимален)
3 ответа
Ты можешь использовать tree.getClass().newInstance()
,
Если вы хотите иметь более сложную логику, чем инстанцирование, вам потребуется либо подход instanceof, либо лучше - сделать каждый RBTree
у подкласса есть метод, который выполняет эту логику (и делает этот метод абстрактным в RBTree
)
Используя рефлексию, вы можете:
string name = tree.getClass().getName()
Class.forName(name).newInstance();
Проблема в том, что если у реальных реализаций есть разные методы и т. Д., Вы не сможете получить к ним доступ.