java - 如果我使用与泛型方法中使用的类型参数占位符 'X' 相同的类名 'X',哪个 X 有效?

标签 java generics

我在 SCJP 指南书中找到了它。代码如下所示。

class X {
    public <X> X(X x) { } 
}

书上说它是有效的。

If you REALLY want to get ridiculous (or fired), you can declare a class with a name that is the same as the type parameter placeholder.

方法参数中的“X”对于给定的内容会有不同的作用吗? 例如;

new X(xObj) => X 的类类型有效。

new X(dog) => X 的类型参数类型有效。

我目前无法测试运行代码。那么有人可以请启发我吗?谢谢。

最佳答案

构造函数类型参数隐藏类型 X ,该类定义。

如果你这样做:

X something = new X("hello");

然后是类型参数X将被 String 取代.

此外,假设您定义了 List<X>在构造函数的主体中并将提供的参数添加到列表中:

List<X> list = new ArrayList<X>();
list.add(x);

new X("hello")将使ListString 参数化(但不是由类型 X class X 定义)并将包含提供的 "hello"字面意思。

总而言之,您必须遵循一些基本的命名约定,并避免使用此类类型参数创建此类类,因为这完全违反了任何代码清洁原则。尽管代码可以编译,但很难阅读。请记住,编程不仅仅是与计算机对话,而是与将来维护您的代码的人员对话(通过您的代码)。

关于java - 如果我使用与泛型方法中使用的类型参数占位符 'X' 相同的类名 'X',哪个 X 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248126/

相关文章:

c# - 获取通用枚举的描述属性

java - 实例化 Map 时使用 Wrapper 类作为键和值

java - 对通用集合进行排序

java - 当 Button 获得焦点时更改图标

java - JAX-RS 客户端 : ResponseProcessingException handling

java - 为什么我的 WeakHashMap 条目没有被 GC 删除?

java - 如何显示以特定数字开头的所有值

java - 如何使用通用三重奏重载构造函数?

java - 带数组的通用类

java - JFreeChart - 如何在 TimeSeries 图表的 X 轴上实时显示