Как вы знаете, принцип проектирования «программа для интерфейса» в целом предпочитает супертипы, а не конкретные типы или реализации.
Согласуется ли это с принципом использования instanceof в программе на Java для получения конкретного типа от супертипа?
В моем приложении Storehouse представляет собой абстрактный класс супертипа с парой частных переменных и общедоступными геттерами и сеттерами.
ConcreteStorehouseA наследуется от Storehouse и имеет множество конкретных методов и переменных. ConcreteStorehouseB аналогичен, но отличается.
Мое приложение получает хранилище. Однако хранилище не является полезным типом для работы. Поскольку единственные действительно полезные методы содержатся в конкретных типах, я использую instanceof следующим образом:
if (storehouse instanceof ConcreteStorehouseA) {
ConcreteStorehouseA concreteStorehouseA = (ConcreteStorehouseA) storehouse;
// perform operations on the concrete type's useful methods and variables
Совместимо ли использование instanceof с этим принципом?
Изменить:
По сути, приложение представляет собой симулятор игры в кости для настольной RPG Shadowrun. Конкретные типы - это разные типы тестов - Успешный тест, Противоположный тест, Расширенный тест - все они имеют очень разные факторы и параметры для их успешной работы. Супертип по существу содержит пул игральных костей!