相关疑难解决方法(0)

泛型<?super A>不允许将A的超类型添加到列表中

我在列表中使用通配符和下界泛型,但编译器抛出错误.

码:

int intStart = 0;       
Number num = new Integer(2);                
List<? super Integer> listOfNumbers = new ArrayList<>();
listOfNumbers.add(intStart);
listOfNumbers.add(num); //throws compiler error
Run Code Online (Sandbox Code Playgroud)

错误:

类型List中的方法add(capture#8-of?super Integer)不适用于参数(Number)

有了List<? super Integer>,我应该被允许添加任何类型的对象Integer或其超类型,例如数字或对象.我已经经历了一些SO讨论,但无法找到为什么我应该犯错误.

java generics arraylist

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

为什么我们不能使用扩展边界添加java泛型中的元素?

我知道我们无法在列表中添加扩展边界类型的元素。但我仍然不确定为什么java编译器不允许这样做。因为编译器可以很容易地检查添加的新元素是否是泛型类型的子类型。有人可以帮我解决这个问题吗?

java generics

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

如何解决此警告? - 是原始类型.应参数化对泛型类型的引用

我已经根据这个答案在JavaFX中创建了一个自定义表格单元格,因此我可以为单元格文本的不同部分设置不同的字体样式.

我在两种不同类型的TableView上使用这个自定义表格单元格:TableView<Track>TableView<Album>.

两者TrackAlbum实现接口AlbumInfoSource:

public interface AlbumInfoSource {
    public String getAlbumTitle();
    public String getFullAlbumTitle();
    public String getReleaseType();
    public String getDiscSubtitle();
    public Integer getDiscCount();
    public Integer getDiscNumber();

}
Run Code Online (Sandbox Code Playgroud)

我的自定义TableCell使用该AlbumInfoSource键入,因此它可以为a TableView<Album>和a 渲染单元格TableView<Track>.

这是基本代码:

public class FormattedAlbumCell<T, S> extends TableCell <AlbumInfoSource, String> {

    private TextFlow flow;
    private Label albumName, albumType, albumDisc;

    public FormattedAlbumCell () {
        /* Do constructor stuff */
    }

    @Override
    protected void updateItem ( String text, boolean …
Run Code Online (Sandbox Code Playgroud)

java

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

不兼容的类型:List&lt;ArrayList&lt;Integer&gt;&gt; 不能转换为 List&lt;List&lt;Integer&gt;&gt;

我正在尝试运行以下代码,它打印给定集合的所有子集。当我将subsets(int[] nums)函数的返回类型更改为ArrayList<ArrayList<Integer>> subsets(int[] nums),但不适用于List<List<Integer>> subsets(int[] nums). 我需要将返回类型设为List<List<Integer>>. 我该如何解决?

public class TestPractice {
    public static void main(String[] args){
        int[] x = {1,2};
        System.out.println(subsets(x));
    }
    
    public static List<List<Integer>> subsets(int[] nums) {
        List<ArrayList<Integer>> subsets = new ArrayList<ArrayList<Integer>>();
        if (nums.length ==1){
            ArrayList<Integer> subset1 = new ArrayList<Integer>();
            ArrayList<Integer> subset2 = new ArrayList<Integer>();
            subset2.add(nums[0]);
            subsets.add(subset1);
            subsets.add(subset2);
            return subsets;
        }
        int[] nums_1 = new int[nums.length-1];
        for(int i = 0; i< nums.length-1; i++) {
        nums_1[i]=nums[i];
        }
        
        List<ArrayList<Integer>> subsets2= subsets(nums_1); 
        ArrayList<ArrayList<Integer>> …
Run Code Online (Sandbox Code Playgroud)

java arraylist

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

NavigableSet <String>与方法参数中的Collection <Object>不匹配

我有需要的方法Collection<Object>,其中Object可以是一个StringCustomClass.然后它接受集合的每个元素并将其传递给具有如下参数的方法Object:

public void foo(Collection<Object> c) {
    for(Object o : c)
        bar(o);
}

public void bar(Object o) {
    if(o instanceof String || o instanceof CustomClass) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

bar当我通过它正常工作StringCustomClass,但是当我试图通过一个NavigableSet<String>foo我弄cannot find symbol; symbol : method foo(java.util.NavigableSet<java.lang.String>).

但是,如果我更改参数类型fooCollection<String>它工作正常,但是这意味着我需要一个新的foo(Collection<CustomClass>),这将涉及到重复代码的方法.有没有解决的办法?

java overloading

0
推荐指数
1
解决办法
140
查看次数

为什么具有超类值的Map无法接受子类对象?

我有两个类:超类Cluster和子类XCluster.XCluster扩展了Cluster.

我有这个方法签名:

public Map<Integer, XCluster> getClusters() {
...
}
Run Code Online (Sandbox Code Playgroud)

我有这个变量:

Map<Integer, Cluster> clusters = getClusters();
Run Code Online (Sandbox Code Playgroud)

我无法编译这个.Eclipse说方法getCluster()不返回这种类型.我需要将类型从XCluster更改为Cluster.

怎么了?

java

0
推荐指数
1
解决办法
1852
查看次数

Array声明和Collection声明之间有什么区别

 1.  List<Car> carList = new ArrayList<Sedan>();

 2.  List<Car> carList = new ArrayList<Car>();
    carList.add(new Sedan());
Run Code Online (Sandbox Code Playgroud)

1有编译错误,2是合法的.

为什么变量声明的类型必须与我们传递给对象类型的类型匹配(不允许派生类型)?我使用的数据如下,绝对正确:

int SIZE = 10;
Car[] carArray = new Sedan[SIZE];
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么收藏品必须声明为条件2?谢谢

java generics collections typesafe

0
推荐指数
1
解决办法
85
查看次数

java:在集合API中创建对象时出错

我有三行代码:

1) List<String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

这不会产生任何错误,
但是当我编写以下代码行时

2)Map<String, List<String>> map = new HashMap<String, ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)

我得到以下错误
类型不匹配:无法转换HashMap<String,ArrayList<String>> to Map<String,List<String>>

3)Map<String,String> d= new HashMap<String,String>();
Run Code Online (Sandbox Code Playgroud)

此行不会产生任何错误

我想知道为什么
(2)行显示我错误.提前致谢.:)

java collections generic-collections

0
推荐指数
1
解决办法
78
查看次数

Java使用泛型类对象调用超类构造函数

我有一个这样的课:

public class GenericClass<T> {
    public void wrap(T item) {...}
}

public abstract class AbstractClass<T, G extends GenericClass<T>> {
    protected G wrapper;

    public AbstractClass(Class<G> generic, T something) {
        wrapper = generic.newInstance();
        wrapper.wrap(something);
    }

    public G wrapAndGet(T item) throws Exception {
        wrapper.wrap(item);
        return wrapper;
    }
}

// 90% of the time people only need this:
public class GeneralClass<T> extends AbstractClass<T, GenericClass<T>> {
    public GeneralClass(T something) {
        super(GenericClass.class, something);    // !error, asking for Class<GenericClass<T>>
    }
}

// and use it like this: …
Run Code Online (Sandbox Code Playgroud)

java

0
推荐指数
1
解决办法
1904
查看次数

Java 泛型 PECS,添加捕获?super 不能应用于 java.util.list

方差(尤其是逆变)问题让我头撞墙一周了。由于这里的几个问题,我终于理解了这个理论,现在一旦我开始研究它,我就会遇到我不明白的错误。

我有一个简单的类层次结构:

抽象类 Fruit,Mango 扩展 Fruit,Orange 扩展 Fruit,BloodOrange 扩展 Orange

abstract class Fruit implements PlantEatable {

    private boolean isRipe;

    private boolean isEatable;

    public boolean isRipe() {
        return isRipe;
    }

    public void setRipe(boolean ripe) {
        isRipe = ripe;
    }

    @Override
    public boolean isEatable() {
        return isEatable;
    }

    public void setEatable(boolean eatable) {
        isEatable = eatable;
    }
}

public class Mango extends Fruit {

}

public class Orange extends Fruit{

}

public class BloodOrange extends Orange{

}
Run Code Online (Sandbox Code Playgroud)

现在,Oracle 文档总体上对泛型非常了解,除了我觉得令人困惑的最重要的部分:https ://docs.oracle.com/javase/tutorial/java/generics/wildcardGuidelines.html

如果我正在做 …

java generics collections contravariance consumer

0
推荐指数
1
解决办法
276
查看次数