在不同的包中有两个同名的类是不好的做法?

时间:2011-07-11 08:21:42

标签: java coding-style packages

我们已经拆分了我们的应用程序,以便程序包A处理来自一个外部源和来自另一个外部源的数据包。在这两种情况下,我们都需要创建一个域对象并使用“Transformer”来执行此操作。

所以我有com.foo.bar.a.ThingTransformercom.foo.bar.b.ThingTransformer

我怀疑这是不好的做法,但想看看SO的优秀人才。

5 个答案:

答案 0 :(得分:17)

我不会说它总是一种不好的做法,但它有点像code smell

如果两个类都有不同的东西,那么为什么他们的名字不同?

如果两个类都相同的东西,那么为什么有两个类呢?

从实际的角度来看,如果这两个类需要在同一个类中引用,它可能会变得非常烦人:你必须使用FQN作为其中一个类(在这种情况下,为了清楚起见,最好将它用于两者。如果这两个类在代码的相当不同的部分中不会从相同的代码中引用,那么实际问题就不那么糟了。

答案 1 :(得分:7)

并非真正糟糕的做法,因为在许多领域都有类似的术语,所以你最终会有相同的名字。另一方面,如果两者都在同一个域中,但只是不同的实现,您可以(以某种方式)在名称中指明实现细节。
非常难看的是如果你必须在同一个源文件中使用它们,在这种情况下你必须使用至少一个完全限定名称。

示例:

java.util.List java.awt.List

表示名称的实施:
java.util.ArrayList
java.util.LinkedList

答案 2 :(得分:5)

没关系。这正是设计上不同包具有不同命名空间的原因。

答案 3 :(得分:3)

没有错,因为你不太可能在同一个代码中同时使用这两个类。在所有类名中复制a / b与包的区别会更糟。

答案 4 :(得分:1)

您必须确定这是否更有帮助或更令人困惑。在同一个程序包中使用相似的名称时,您可能会遇到同样的问题。

比如

更令人困惑的例子
com.sun.corba.se.internal.Interceptors.PIORB extends
com.sun.corba.se.internal.POA.POAORB which extends
com.sun.corba.se.internal.iiop.ORB which extends    
com.sun.corba.se.impl.orb.ORBImpl which extends
com.sun.corba.se.spi.orb.ORB which extends    
com.sun.corba.se.org.omg.CORBA.ORB which extends
org.omg.CORBA_2_3.ORB which extends
org.omg.CORBA.ORB
相关问题