相关疑难解决方法(0)

什么是PECS(制作人扩展消费者超级)?

我在阅读泛型时遇到了PECS(制片extends人和消费者的super简称).

能否给我一个人解释如何使用佩奇之间解决困惑extendssuper

java generics super pecs bounded-wildcard

680
推荐指数
11
解决办法
9万
查看次数

如何添加到List <?扩展Number>数据结构?

我有一个List,声明如下:

 List<? extends Number> foo3 = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)

我试图将3添加到foo3.但是我收到如下错误消息:

The method add(capture#1-of ? extends Number) in the type List<capture#1-of ?
extends Number> is not applicable for the arguments (ExtendsNumber)
Run Code Online (Sandbox Code Playgroud)

java generics

145
推荐指数
2
解决办法
6万
查看次数

什么是<?超级T>语法?

我无法理解以下语法:

public class SortedList< T extends Comparable< ? super T> > extends LinkedList< T >
Run Code Online (Sandbox Code Playgroud)

我看到类SortedList扩展了LinkedList.我只是不知道是什么

T extends Comparable< ? super T>
Run Code Online (Sandbox Code Playgroud)

手段.

到目前为止我对它的理解是类型T必须是一个实现Comparable的类型......但是它是什么< ? super T >

java

94
推荐指数
4
解决办法
6万
查看次数

Java Generics中'super'和'extends'之间的区别是什么?

我正在尝试学习Java泛型.我不清楚你什么时候使用<T extends Foo>以及何时使用<T super Foo>.这些事情中的每一个对T意味着什么?可以说我有<T extends Comparable><T super Comparable>,什么每个这些是什么意思?

我在sun.com上看过几个教程,但我还是迷路了.有人能举例说明吗?

谢谢!

java generics

78
推荐指数
5
解决办法
4万
查看次数

什么是通用<?的真实例子?超级T>?

据我所知,它<? super T>代表任何超级类T(T任何级别的父类).但我真的很难想象这个通用绑定通配符的任何现实生活示例.

我明白了什么<? super T>意思,我看过这个方法:

public class Collections {
  public static <T> void copy(List<? super T> dest, List<? extends T> src) {
      for (int i = 0; i < src.size(); i++)
        dest.set(i, src.get(i));
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个真实生活用例的例子,可以使用这种结构,而不是解释它是什么.

java generics inheritance super

74
推荐指数
3
解决办法
4554
查看次数

为什么Set <?允许扩展Foo <?>>,但不设置Set <Foo <?>>

我想知道泛型如何在这种情况下工作,为什么 Set<? extends Foo<?>> set3 = set1;允许但Set<Foo<?>> set2 = set1;不是?

import java.util.HashSet;
import java.util.Set;

public class TestGenerics {
    public static <T> void test() {
        Set<T> set1 = new HashSet<>();
        Set<?> set2 = set1;             // OK
    }

    public static <T> void test2() {
        Set<Foo<T>> set1 = new HashSet<>();
        Set<Foo<?>> set2 = set1;           // COMPILATION ERROR
        Set<? extends Foo<?>> set3 = set1; // OK
    }
}

class Foo<T> {}
Run Code Online (Sandbox Code Playgroud)

java generics

21
推荐指数
2
解决办法
1087
查看次数

差异为<?方法和变量声明中的super/extends String>

鉴于:

import java.util.*;

public class Hancock {
    //insert code here
        list.add("foo");
    }
}
Run Code Online (Sandbox Code Playgroud)

在第5行独立插入的哪两个代码片段将在没有警告的情况下编译?(选择两个)

A. public void addString(List list) {
B. public void addString(List<String> list) {
C. public void addString(List<? super String> list) {
D. public void addString(List<? extends String> list) {
Run Code Online (Sandbox Code Playgroud)

正确答案是B&C.

答案A和B对我来说非常清楚.对于答案C&D我知道继承的方式,但是我无法理解为什么答案D不能在Eclipse中编译,而所有其他人都这样做(A有关于通用的警告,B&C没有warrings).

Eclipse中答案D的错误是The method add(capture#1-of ? extends String) in the type List<capture#1-of ? extends String> is not applicable for the arguments (String).

另一方面,这编译:

public void addString() {
    List<? extends String> list1 = new ArrayList<String>();
    List<? super …
Run Code Online (Sandbox Code Playgroud)

java generics collections extends super

10
推荐指数
1
解决办法
4615
查看次数

为什么在类级别不允许使用泛型中的超级关键字

在泛型

class A<T extends Number> 被允许

class A<T super Integer> 不被允许

我没有明白这一点.这可能听起来像新手问题,但我陷入其中

java generics polymorphism inheritance

10
推荐指数
1
解决办法
1593
查看次数

`copy(List <?super T> dest,List <?extends T> src)`和`copy(List <T> dest,List <?extends T> src)之间的区别

我正在尝试通过阅读以下内容来学习Java Generics通配符:http: //www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#FAQ103

材料中有一个例子:

public class Collections { 
  public static <T> void copy (List<? super T> dest, List<? extends T> src) {
      for (int i=0; i<src.size(); i++) 
        dest.set(i,src.get(i)); 
  } 
}
Run Code Online (Sandbox Code Playgroud)

我想知道我是否可以更改方法签名如下:

  public static <T> void copy(List<? super T> dest, List<? extends T> src) {
Run Code Online (Sandbox Code Playgroud)

  public static <T> void copy(List<T> dest, List<? extends T> src) {
Run Code Online (Sandbox Code Playgroud)

这两种方法是否存在差异?

例子将不胜感激.

java generics

8
推荐指数
2
解决办法
543
查看次数

只写集合有什么意义?

<? extends T>形成只读集合

<? super T>形成只写集合

我以某种方式明白为什么使用只读集合,例如在多线程环境中使用它(还有其他情况吗?)

但为什么要使用只写集合呢?如果您无法在某些时候读取它并使用它的值,那还有什么意义呢?我知道你可以从中获取一个对象,但这违反了类型安全。

编辑:@Thomas 链接的问题(Java 中 <? super T> 和 <? extends T> 之间的差异)确实展示了如何创建只写集合,但没有回答“为什么”你首先需要一个集合。所以它不是重复的

java generics collections

6
推荐指数
2
解决办法
349
查看次数