小编Har*_*ngh的帖子

当我使用String类型参数枚举vector时,我得到了ClassCast异常,但没有异常,其中Integer作为类型参数

我正在尝试向量并编写一个简单的代码来通过枚举访问它的元素.

Vector v = new Vector();
    v.add("Some String");
    v.add(10);

    Enumeration e = v.elements();
    while(e.hasMoreElements()) System.out.println(e.nextElement());
Run Code Online (Sandbox Code Playgroud)

使用原始类型会按预期生成结果(打印元素).但是,当我使用泛型类型的枚举器时,它会变得棘手.

使用String作为类型参数:

Vector v = new Vector();
    v.add("Some String");
    v.add(10);

    Enumeration<String> e = v.elements();
    while(e.hasMoreElements()) System.out.println(e.nextElement());
Run Code Online (Sandbox Code Playgroud)

输出:

一些字符串

线程"main"java.lang.ClassCastException中的异常:java.lang.Integer无法强制转换为java.lang.String

使用Integer作为类型参数:

Vector v = new Vector();
    v.add("Some String");
    v.add(10);

    Enumeration<Integer> e = v.elements();
    while(e.hasMoreElements()) System.out.println(e.nextElement());
Run Code Online (Sandbox Code Playgroud)

输出:

一些字符串

10

这里发生了什么?两个案例都不应该产生ClassCast异常吗?

java generics enumeration vector

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

方法参考中的类型推断

我最近把手放在Java 8上并尝试使用方法参考.我正在尝试不同类型的方法引用,并陷入"引用特定类型的任意对象的实例方法"类型中.

String[] arr = {"First", "Second", "Third", "Fourth"};

Arrays.sort(arr, String::compareToIgnoreCase);
Run Code Online (Sandbox Code Playgroud)

这非常有效.但是当我尝试通过其类型引用用户定义类的方法时:

Demo2[] arr = {a, b};

Arrays.sort(arr, Demo2::compare);
Run Code Online (Sandbox Code Playgroud)

这将编译时错误显示为"无法从静态上下文引用非静态方法".

这是Demo2类:

public class Demo2 implements Comparator<Demo2> {
    Integer i;

    Demo2(Integer i1){
        i = i1;
    }

    public Integer getI() {
        return i;
    }

    @Override
    public int compare(Demo2 o1, Demo2 o2) {
        return o1.getI().compareTo(o2.getI());
    }
}
Run Code Online (Sandbox Code Playgroud)

java java-8 method-reference

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

标签 统计

java ×2

enumeration ×1

generics ×1

java-8 ×1

method-reference ×1

vector ×1