泛型/参数化类Java命名空间

时间:2014-10-27 01:29:01

标签: java oop generics namespaces parameterization

G'!天

给定两个类:A和B,给定G:Java中的泛型类。

如果我要将通用类定义为G<A>G<B>,那么将A和B定义为类本身会有什么不同吗?我的直觉是否定的,因为字母只是在类属性/方法中使用的参数,并且在初始化时将由参数化的类G替换。但这似乎使事情变得复杂,因为如果你想在G中拥有A或B类型的属性呢?

2 个答案:

答案 0 :(得分:4)

与任何其他变量一样,泛型类型变量具有范围。它们的范围是它们声明的类的主体。

在该类中,它们定义的名称始终引用泛型类型。如果您在其他地方声明了其他类型的同名,则需要使用其完全限定名称。

class Generic<Integer> {
    Integer ourTypeVariable;
    java.lang.Integer realInteger;
}

不要这样编码,特别是对于常见的类型名称(基本上是JDK中的所有内容)。

答案 1 :(得分:2)

是的,这可行(但可能会令人困惑)。

以下是等效的

class G<A> {}
class G<B> {}
class G<T> {}
class G<String> {}

所以我建议你选择一个减少混淆的占位符名称。

  

但这似乎使事情变得复杂,因为如果你想在G中拥有A或B类型的属性呢?

同样,您可以通过将占位符命名为其他内容来避免这种情况。

但如果必须,您可以通过完全限定名称消除歧义:

class G<A>{
   my.com.package.A someVariable;
}