java - 用户定义类的类型转换

标签 java refactoring

我有很多类基本上是等价的,即在所有方面都具有几乎相同的功能。我们称它们为 A 和 B。有数百种方法正在使用 A,现在由于代码更改,我必须将它们更改为 B。

有没有一种方法可以对 A 和 B 之间的映射进行编程,从而使代码更改最少?

最佳答案

如果A不是 final ,你可以制作B extends A , 并有 B的方法 @Override A的。然后,无论您之前在 instanceof A 上调用什么方法,您现在提供一个 instanceof B ,并让动态调度处理其余部分。

这称为多态性。它仅适用于非 static具有完全相同签名的方法。你不能@Override static方法。

另见

相关问题


在界面上

根据您这样做的原因,您应该了解接口(interface)的概念以及如何在面向对象的编程中使用它们以实现这种灵 active 和便利性。

考虑 interface List<E> ,例如,和一个实现 ArrayList<E> .如果你编写了一个与 ArrayList<E> 一起工作的整个库,做所有平常的事情add/addAll/remove等等,现在你必须使用 LinkedList<E>相反,您别无选择,只能转到源代码并更改所有 ArrayList<E>LinkedList<E> ,并希望更改不会破坏另一个仍然假定 ArrayList<E> 的代码被使用了。

如果您的图书馆使用 List<E> , 然后切换到 LinkedList<E>只需要在创建对象的地方完成。所有其他执行 add/addAll/remove 的代码仍然可以正常工作,因为那些是在 interface List<E> 中定义的方法所有实现者都将拥有。

从目前的上下文来看还不清楚,但如果AB如此相似,那么也许它们属于某种类型 X .如果是这样,您应该考虑定义 interface X , 并有 A implements X , 和 B implements X .

另见

相关问题

关于java - 用户定义类的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3549902/

相关文章:

refactoring - Duck 类型作为反射的语法糖 : Good or bad idea?

java - 传承策略

java - Hybris SOLR - 使用自由范围 slider 的 Facet 价格值

qt - Qt 有类似 .NET Reflector 的东西吗?

mysql - 在 MySQL 中将一对多关系重构为多对多 : How to formulate the query?

c# - 如何重构这个例程以避免使用递归?

c# - 如何重构这个 switch 语句?

java - 使用 Hibernate 和 JDBC 关闭连接

java - OSGI 的 EJB 持久性问题

java - JavaFX 中的多个 boolean 值绑定(bind)