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


G'day!

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

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

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

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

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

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

是的,这会起作用(但可能会混淆)。

以下是等效

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

因此,我建议您选择一个占位符名称,以减少混淆。

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

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

但如果你必须这样做,你可以通过完全限定的名称来消除歧义:

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

相关内容

  • 没有找到相关文章

最新更新