我在 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")
将使List
由 String
参数化(但不是由类型 X
class X
定义)并将包含提供的 "hello"
字面意思。
总而言之,您必须遵循一些基本的命名约定,并避免使用此类类型参数创建此类类,因为这完全违反了任何代码清洁原则。尽管代码可以编译,但很难阅读。请记住,编程不仅仅是与计算机对话,而是与将来维护您的代码的人员对话(通过您的代码)。
关于java - 如果我使用与泛型方法中使用的类型参数占位符 'X' 相同的类名 'X',哪个 X 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248126/