Java 为什么会/应该允许这样做?
我知道并不是所有的WTF都是平等的,但为什么这是有效的呢。它确实会编译,并且只在您运行它时才会抱怨,因为它没有Java 为什么会/应该允许这样做?,java,syntax,Java,Syntax,我知道并不是所有的WTF都是平等的,但为什么这是有效的呢。它确实会编译,并且只在您运行它时才会抱怨,因为它没有static void main方法,但除此之外,它在语法上是正确的。 我试着给它一个main方法,把它放在一个名为\ java.java的文件中,它确实运行了 class _<_> { <_> _ _(_ _){ return (_)_; } } 类_ { _{return({)} } 显然,类中的“thing”是一个方法,它接受一个名称与其类型相同
static void main
方法,但除此之外,它在语法上是正确的。
我试着给它一个main
方法,把它放在一个名为\ java.java
的文件中,它确实运行了
class _<_>
{
<_> _ _(_ _){ return (_)_; }
}
类_
{
_{return({)}
}
显然,类
中的“thing”是一个方法,它接受一个名称与其类型相同的参数,并返回它得到的任何参数。显然,()
是某种铸造。
但是我没有在(\uuu)
之前得到零件。
我猜这个方法的名字是
。
,但是。
是什么?如果它是泛型,那么它不应该是\uu
?替换为建议的“完全使用”。然后您可能会看到\uu(\uu)
部分是节点foo(Node Node)
。所以它实际上是方法名和返回类型
class Node<T> {
<T> Node foo(Node node) {
return (Node) node;
}
public static void main(String[] args) {
Node<String> a = new Node();
Node<String> b = new Node();
a.foo(b);
}
}
类节点{
节点foo(节点节点){
返回(节点)节点;
}
公共静态void main(字符串[]args){
节点a=新节点();
节点b=新节点();
a、 傅(乙);;
}
}
@ravindrab采取的方法是正确的,但结果并不正确
(
)的声明(在原始源代码中)与类类型节点的声明(
)形成阴影;因此,参数的类型是T
,而不是Node
X
class Node<X> {
<T> T foo(T t) {
return (T) t;
}
}
类节点{
T-foo(T-T){
返回(T)T;
}
}
阴影的规则在中进行了解释。适用于本案的具体规定如下:
名为n
的类型的声明d
会隐藏任何
名为n
的其他类型,在d
发生点的范围内
在d
的整个范围内
将
\uu
替换为类似A
的内容,然后看看是否有意义……是的。我已经试过了,仍然没有在方法的开头得到
。我想如果你回答:“为什么不呢?”嗯。。。所以我想我从来没有这样写过泛型。我通常会把节点
。好吧,就是这样。在Eclipse中验证这一点的一个更简单的方法是:转到cast()
)中的,然后选择“opendeclaration”(F3)。光标将跳转到类型参数的定义;将
转换为该类型参数的类型。