是否使用Java的instanceOf兼容"程序到界面"的设计原则?

Arv*_*nem 8 java instanceof design-principles

如您所知,"接口程序"设计原则广泛地倾向于使用超类型而不是具体类型或实现.

是否与在Java程序中使用instanceof从超类型派生具体类型的原则一致?

在我的应用程序中,Storehouse是一个抽象的超类型类,包含几个私有变量和公共getter和setter.

ConcreteStorehouseA继承自Storehouse,有很多具体的方法和变量.ConcreteStorehouseB类似但不同.

我的应用程序收到了一个仓库.但是,Storehouse不是一个有用的类型.因为具体类型中只包含真正有用的方法,所以我使用instanceof如下:

if (storehouse instanceof ConcreteStorehouseA) {
    ConcreteStorehouseA concreteStorehouseA = (ConcreteStorehouseA) storehouse;
    // perform operations on the concrete type's useful methods and variables
Run Code Online (Sandbox Code Playgroud)

使用instanceof与原理兼容吗?

编辑:

本质上,该应用程序是桌面RPG,Shadowrun的骰子模拟器.具体类型是不同的测试类型 - 成功测试,反对测试,扩展测试 - 它们的成功操作都有非常不同的因素和参数.超类型基本上包含骰子池!

Cos*_*atu 10

根据经验,您提到的"程序到接口"原则可以转换为:import 只有接口类型,对子类没有任何编译时依赖性.

因此,你的问题的答案肯定是否定的.由于您转换为具体类型,因此您不会对接口进行编程.


Jon*_*eet 8

你自己说过:

我的应用程序收到了一个仓库.但是,Storehouse不是一个有用的类型.因为唯一真正有用的方法包含在具体类型中

换句话说,你的Storehouse抽象不是给你买任何东西......为什么你有它?

您是否可以Storehouse在每个具体类中创建抽象方法,然后让您在客户端代码中以相同的方式处理具体类型?这就是抽象的目标.