相关疑难解决方法(0)

区别?(通配符)和Java中的Type参数

有人可以解释一下这两种方法之间的区别吗?它们一样吗?就他们解决的问题而言,他们看起来与我相同.如果它们相同,为什么需要??

方法#1,无界限

public static void printList(List<?> list) {
    for (Object elem : list)
        System.out.println(elem + " ");
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

方法#2,无界:

public static <T> void printList(List<T> list) {
    for (Object elem : list)
        System.out.println(elem + " ");
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

方法#1,有界

public static void printList(List<? extends Number> list) {
    for (Object elem : list)
        System.out.println(elem + " ");
    System.out.println();
}
Run Code Online (Sandbox Code Playgroud)

方法#2,有界:

public static <T extends Number> void printList(List<T> list) {
    for (Object elem : list)
        System.out.println(elem + " ");
    System.out.println(); …
Run Code Online (Sandbox Code Playgroud)

java generics

27
推荐指数
3
解决办法
6622
查看次数

嵌套通配符

发现了有关使我烦恼的无限制通配符的事实。例如:

public class Test {

      private static final Map<Integer, Map<Integer, String>> someMap = new HashMap<>();

      public static void main(String[] args) {
         getSomeMap();
      }

      static Map<?, Map<?, ?>> getSomeMap() {
         return someMap;  //compilation fails
      }
}
Run Code Online (Sandbox Code Playgroud)

尽管可以使用Map<?, ?>或Map<?, Map<Integer, String>>返回类型,但失败。

有人可以告诉我确切原因吗?提前致谢。


更新资料

我认为,对于此问题,我似乎理解并最简单的解释(忽略所有这些复杂的规则)是Capture Conversion(link)中的最后一个注释:Capture conversion is not applied recursively.

java generics wildcard

5
推荐指数
1
解决办法
186
查看次数

标签 统计

generics ×2

java ×2

wildcard ×1