我正在尝试向量并编写一个简单的代码来通过枚举访问它的元素.
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 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)