0

天!

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

如果我将泛型类定义为G<A>or G<B>,将 A 和 B 定义为类本身会有什么不同吗?我的直觉是不,因为字母只是在类属性/方法中使用的参数,并且在初始化时将被任何参数化的类 G 替换。但这似乎使事情复杂化了,因为如果您想在 G 中拥有 A 或 B 类型的属性怎么办?

4

2 回答 2

4

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

在该类中,定义它们的名称始终是指泛型类型。如果您在别处声明了另一种同名类型,则需要使用其完全限定名称。

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

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

于 2014-10-27T01:33:46.953 回答
2

是的,这会起作用(但它可能会令人困惑)。

以下是等价的

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

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

但这似乎使事情复杂化了,因为如果您想在 G 中拥有 A 或 B 类型的属性怎么办?

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

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

class G<A>{
   my.com.package.A someVariable;
}
于 2014-10-27T01:33:48.940 回答