gpt4 book ai didi

java - 将 HashMap 值添加到 TreeSet 时出错

转载 作者:行者123 更新时间:2023-11-30 05:00:21 25 4
gpt4 key购买 nike

这是一些示例代码...我似乎总是遇到 ClassCastException...有人指出我做错了什么吗?

    package com.query;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

import org.junit.Test;

import com.google.common.collect.Sets;


public class ClassCastExceptionTest {

@Test
public void test() {

A<SomeType> a1 = new A<SomeType>(1);
A<SomeType> a2 = new A<SomeType>(2);
A<SomeType> a3 = new A<SomeType>(3);

Map<String, A<SomeType>> map = new HashMap<String, A<SomeType>>();
map.put("A1", a1);
map.put("A2", a2);
map.put("A3", a3);

Collection<A<SomeType>> coll = map.values();

Set<A<SomeType>> set = Sets.newTreeSet(coll);

System.out.println("Done.");

//EXCEPTION...
//com.query.ClassCastExceptionTest$A cannot be cast to
//com.query.ClassCastExceptionTest$BaseType
}

private class A<T extends BaseType> extends Base<T> {

public A(int i) {
super(i);
}
}

private class Base<T extends BaseType> implements Comparable<T> {

private Integer id;

public Base(int id) {
this.id = id;
}

/**
* @return the id
*/
public Integer getId() {
return id;
}

/**
* @param id the id to set
*/
@SuppressWarnings("unused")
public void setId(int id) {
this.id = id;
}

@Override
public int compareTo(T o) {
return getId().compareTo(o.getId());
}
}

private class SomeType extends BaseType {

@Override
public Integer getId() {
return 0;
}

@Override
public int compareTo(BaseType o) {
return this.getId().compareTo(o.getId());
}
}

private abstract class BaseType implements Comparable<BaseType> {

public abstract Integer getId();
}

}

最佳答案

为了添加到TreeSet(具有自然排序),类应该与其自身进行比较:

private class Base<T extends BaseType> implements Comparable<Base> { ... }

而在您的情况下BaseT相当:

private class Base<T extends BaseType> implements Comparable<T> { ... }

关于java - 将 HashMap 值添加到 TreeSet 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6955320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com