Java通用方法-what';extends关键字的用法是什么?

Java通用方法-what';extends关键字的用法是什么?,java,generics,Java,Generics,我不明白这两段代码之间的区别 在第一个示例中,T extends List的作用是什么?我是否可以将其解释为“一个名为的方法,请参见,您可以将列表的类型或子类型传递给它”?如果是,为什么不使用方法2呢 一, “有界泛型类型”通常用于允许类中方法的参数类型或返回类型相互关联 考虑您的示例1): public-void见(tn){ 泛型类型被限定为List的子类型,因此在JVM级别,编译(原始)代码和签名将与示例2相同 然而,编译器处理“泛型”和“原始”类型的方式存在一些细微的语义差异。“原始”和

我不明白这两段代码之间的区别

在第一个示例中,
T extends List
的作用是什么?我是否可以将其解释为“一个名为
的方法,请参见
,您可以将
列表
的类型或子类型传递给它”?如果是,为什么不使用方法2呢

一,

“有界泛型类型”通常用于允许类中方法的参数类型或返回类型相互关联

考虑您的示例1):

public-void见(tn){
泛型类型被限定为List的子类型,因此在JVM级别,编译(原始)代码和签名将与示例2相同

然而,编译器处理“泛型”和“原始”类型的方式存在一些细微的语义差异。“原始”和“泛型”类型之间的转换通常是一个警告,未经检查的泛型类型操作也是如此

对于正确使用泛型的代码,声明列表(我理解)更可取。由于方法参数之间没有相互关系,因此第二种样式更简单

我的建议是:

public void see (List<?> items) {}
public void请参见(列表项){
1)中的样式对于相互关联的参数/或结果类型更有意义。两个单独的示例显示了更典型的用法:

public <T>  List<T> getChildren (T parent);
public <T>  List<T> listItems (T list1, T item2);
public <T extends List<?>>  T combineLists (T list1, T list2);
公共列表getChildren(T parent);
公共清单清单项目(T清单1、T清单项目2);
public通常使用“有界泛型类型”,以允许类中方法的参数类型或返回类型相互关联

考虑您的示例1):

public-void见(tn){
泛型类型被限定为List的子类型,因此在JVM级别,编译(原始)代码和签名将与示例2相同

然而,编译器处理“泛型”和“原始”类型的方式存在一些细微的语义差异。“原始”和“泛型”类型之间的转换通常是一个警告,未经检查的泛型类型操作也是如此

对于正确使用泛型的代码,声明列表(我理解)更可取。由于方法参数之间没有相互关系,因此第二种样式更简单

我的建议是:

public void see (List<?> items) {}
public void请参见(列表项){
1)中的样式对于相互关联的参数/或结果类型更有意义。两个单独的示例显示了更典型的用法:

public <T>  List<T> getChildren (T parent);
public <T>  List<T> listItems (T list1, T item2);
public <T extends List<?>>  T combineLists (T list1, T list2);
公共列表getChildren(T parent);
公共清单清单项目(T清单1、T清单项目2);

public在这个例子中,我认为它没有用

但在这一点上:

public <T extends MyClass> T[] toArray(List<T> n) {
   ...
}
鉴于在这种情况下:

//I don't know the generic type of the list so I return a Object[]
public Object[] toArray(List n) {
   ...
}
你需要决定结果


注意:为了回答您的问题,这里的
仅将
T
的类型限制为
MyClass
的子类

在这个例子中,我认为它没有用

但在这一点上:

public <T extends MyClass> T[] toArray(List<T> n) {
   ...
}
鉴于在这种情况下:

//I don't know the generic type of the list so I return a Object[]
public Object[] toArray(List n) {
   ...
}
你需要决定结果


注意:为了回答您的问题,这里的
仅将
T
的类型限制为
MyClass
的子类

“为什么我不直接使用方法2?”在这个特殊情况下:好问题。方法1在这里没有多大意义。“为什么我不直接使用方法2?”在这个特例中:好问题。方法1在这里没有多大意义。如果它是:public List toArray(List n),它也有意义。更清楚的是,泛型主要在使用incollection时有意义。如果是:public List to array(List n),也有意义。更清楚的是,泛型主要在使用非集合时才有意义。