Java 方法中的泛型声明
在下面的代码示例中,Java 方法中的泛型声明,java,generics,Java,Generics,在下面的代码示例中,get方法的返回类型前面的泛型类型声明是什么意思 public interface Listener<T, R> { <T> Listener<T, R> get(); } 公共接口侦听器{ 侦听器get(); } 我理解它在Listener的类声明中的含义,但我没有找到一个将以这种方式用于方法的实际示例。它是一种方法范围的参数化类型。它仅在get()方法的范围内定义,它隐藏了Listener类中声明的T。 隐藏类型是需要避免的
get
方法的返回类型前面的泛型类型声明
是什么意思
public interface Listener<T, R> {
<T> Listener<T, R> get();
}
公共接口侦听器{
侦听器get();
}
我理解它在
Listener
的类声明中的含义,但我没有找到一个将
以这种方式用于方法的实际示例。它是一种方法范围的参数化类型。它仅在get()
方法的范围内定义,它隐藏了Listener
类中声明的T
。隐藏类型是需要避免的,在泛型类中定义方法范围的参数化类型通常是有问题的 我想知道参数在那个地方的作用是什么 这里
T
是由方法的客户端推断的类型。但是由于该
T
与类中声明的T
不同,因此它可以是一种不同的类型。如果您想将泛型类的
T
转换为客户机指定的另一种类型,这是有意义的。
例如,假设实现:
public class MyListener implements Listener<String, Integer>{
@Override
public <T> Listener<T, Integer> get() {
return convert to T and return a new instance of Listener...;
}
}
方法引用将编译:
Listener<String, Integer> validListener = MyListener::new;
Listener validListener=MyListener::new;
这是一种特定于方法的参数化类型,但。。。接口中已经定义了T
和R
参数,因此应避免这样做,因为它会对接口隐藏已定义的参数
正确的用法示例是接口仅定义参数R
:
public interface Listener<R> {
<T> Listener<R> get(T t);
}
公共接口侦听器{
侦听器get(T);
}
然而,即使是这种用法也值得怀疑。示例很清楚-该接口使用参数
R
,并且仅其方法使用T
。没有这个
信号的另一种方法将无法使用T
谢谢你,但为什么这是一个糟糕的问题,并且被标记为否定点?我没有投反对票,但我猜:因为你没有表现出任何研究成果。如果你说的是“我研究了教程,它说的是某某,但这与这个和那个有什么关系?”这样的话,你的问题可能会得到更好的回答。太多的人懒得使用搜索引擎,人们对此感到厌倦。哦,我试图避免任何不必要的信息来准确回答问题,但是我会接受你的建议,我并不知道。这些信息使你的问题更具体,质量更高,而不是一个简单地通过看基本泛型教程来回答的问题不是“不必要的信息”我只是检查了这个,我以前没有注意到这种行为,我现在很清楚了,谢谢你,另一方面,我想知道我的问题有什么不好的地方,这是我应该假设的。你的问题一点也不坏。我投了赞成票。也许说你理解
课堂声明中的意思会让事情变得更好。@JorgeL.Morla:不是你的反对票,但你的问题没有显示出之前对这个问题进行研究的证据。是的,你可能已经做了一些研究,但是在问题本身的文本中没有具体的证据。本网站期待更多的问题和答案,并鼓励会员对这两个问题的质量进行投票。
Listener<String, Integer> validListener = MyListener::new;
public interface Listener<R> {
<T> Listener<R> get(T t);
}