java - 传承与类型转换设计

标签 java design-patterns casting

考虑以下类层次结构:

interface Transport { ... }

class Car      implements Transport {}
class Bicycle  implements Transport {}
class Airplane implements Transport {}

每个类都实现一些特定的方法。

在 EJB 代码的某些部分,有一个服务从数据库获取 Transport 实例,并调用特定于 Car 的方法。

Transport transport = getTransport(...);
Car car = (Car) transport;
car.specificCarMethod(...);

有什么好的做法可以避免 Actor 阵容吗?

最佳答案

这是基于意见的;这是我的意见。

如果界面经过精心设计,您就不需要进行强制转换。您可能需要在接口(interface)中发布特定的CarMethod,并在除Car之外的所有类中以空主体实现它。

从 Java 8 开始,您可以为方法指定默认实现,在 Java 8 之前,您可以使用抽象类来代替接口(interface)或除了接口(interface)之外还使用抽象类。

您也可以考虑使用 visitor pattern如果您想将代码与实现接口(interface)的类分离,并避免在接口(interface)中声明某些方法。

关于java - 传承与类型转换设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37725237/

相关文章:

C:指向指定长度类型的指针

java - Android: Activity 建立网络连接

java - request.getRemoteHost() 是否返回浏览器主机的 IP?

java - 参数化策略模式

javascript - 我如何学习 JavaScript 编码模式

c - 在 C 中正确丢弃 volatile 变量内容的替代方法是什么?

java - 使用java通过3DES-128位CBC模式(填充零)解密数据

java - OSX 升级后,eclipse 缺少 applescriptengine.jar

c# - 单例构造函数是幂等的吗?

c# - 如何在 C# 中使用表示反射结果类型的变量进行转换 .Invoke()