我对processing.org和Java非常陌生。我尝试将对象存储在HashMap中,然后遍历HashMap的值,对存储的对象调用方法。为此,我假设我需要将迭代器向下转换为我的类的类型,但这会抛出一个ClassCastException ("java.util.HashMap$ValueIterator不能被转换为sketch_oct27a$MyClass")。下面的简化代码演示了此行为:
import java.util.*;
void setup() {
HashMap m = new HashMap();
m.put("First", new
考虑到以下代码,我有一个问题:
class A{}
class B extends A {}
class C extends B{}
public class Test {
public static void main(String[] args) {
A a = new A();
A a1=new A();
B b = new B();
// a=b;// ok
// b=(B)a;// ClassCastException
// a=(A)a1; // ok
// a=a1
我正在阅读关于的文章,我遇到了这个主题,我有点困惑。
来自:
public abstract class Node <N extends Node<N>> {
private final List<N> children = new ArrayList<N>();
private final N parent;
protected Node(N parent) {
this.parent = parent;
parent.children.add(this); // error: incompatibl
我试图理解泛型,但我在通配符的边界和转换。例如:
List<? extends Number> l = new ArrayList<>();
List<PositiveInteger> p = new ArrayList<PositiveInteger>();
p.add(new PositiveInteger(10));
l = p;
NegativeInteger ni = (NegativeInteger) l.get(0);// runtime java.lang.ClassCastException:
System.out.printl
GenericArrayCreationIsDisallowedInJava构造函数中的语句是如何工作的?some1能解释一下吗?
public class GenericArrayCreationIsDisallowedInJava<I> {
private I[] i;
public GenericArrayCreationIsDisallowedInJava(int n)
{
i = (I[]) new Object[n];//works and prints out "Created". How?
下面是我编写的第一个Java泛型:
public class MyClass {
public static <T> T castToAnotherType(Object param) {
T ret = null;
try {
ret = (T) param;
} catch (ClassCastException e) {
System.out.print("Exception inside castToAnotherType()");
}
Java中允许向上转换,但是向下转换会导致编译错误。
编译错误可以通过添加强制转换来消除,但无论如何都会在运行时中断。
在这种情况下,如果Java不能在运行时执行,为什么Java允许向下转换?
这个概念有什么实际用途吗?
public class demo {
public static void main(String a[]) {
B b = (B) new A(); // compiles with the cast,
// but runtime exception - java.lang.ClassCastExcep
所以我有这样的代码:
public void success(List<Object> profiles, Response response) {
List<MyCustomObject> list= new ArrayList<MyCustomObject>();
for (Object profile : profiles) {
list.add((MyCustomObject) profile); // this line crashes
}
我使用的是java泛型和varargs。
如果我使用下面的代码,我会得到一个ClassCastException,即使我根本没有使用类型转换。
更奇怪的是,如果我在Android (dalvik)上运行,异常中不包含堆栈跟踪,并且如果我将接口更改为抽象类,则异常变量e为空。
代码:
public class GenericsTest {
public class Task<T> {
public void doStuff(T param, Callback<T> callback) {
// This gets calle
我想知道如何在构造函数中初始化泛型数组。
在google上搜索之后,我编写了下面的代码。
public class Test<E>{
private E[] mData;
public Test(){
mData = (E[])new Object[100];
}
public void put(E data, int index){
mData[index]=data;
}
public E get(int index){
return mData[index];
}
我正在尝试创建嵌套类Key的数组,该数组使用主类BTree中的类型变量/参数,但无法在运行时摆脱ClassCastException。我不太擅长Java中的泛型,如果有人让我知道问题是什么,以及如何解决它,我会很感激。
public class BTree<T extends Comparable<T>, V> {
//...
private class Node {
public int n;
public boolean isLeaf = false;
public Key[] keys = (Key[])
我想编写一个函数来强制转换为类型A,其中A可以是例如ListInt,也可以是更复杂的参数化类型,如Map[Int,ListInt]。
def castToType[A](x: Any): A = {
// throws if A is not the right type
x.asInstanceOf[A]
}
现在,由于类型擦除(我相信),即使类型不正确,代码也可以正常工作。该错误仅在访问时出现,并带有ClassCastException。
val x = List(1, 2, 3)
val y = castToType[List[String]](x)
y(0) --> th
Java在适用的地方使用类型擦除,但是,当然,在调用方法时,参数类型必须匹配。
当我无法在编译时确保类型时,如何避免ClassCastException ?示例:
class KeyedHashSet<K,E> // implements Set<E>
{ final Map<K,E> map = new HashMap<>();
final Function<E,K> keyExtractor; // extracts intrusive key from value
public KeyedHashSet(Functio
我在publishResults方法中有以下代码,其中包含适配器类实现Filterable接口以筛选项列表。(目标:使用搜索视图在回收器视图中过滤项目)
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
// taskList is of type MutableList<TaskItem>
taskList.clear()
// crash on
taskList.addAll(results!!.values as Collection<
下面的代码来自一个名为ButterKnife的安卓库。我在弄清楚它是怎么工作的。
@SuppressWarnings("unchecked") // That's the point.
public <T> T castParam(Object value, String from, int fromPosition, String to, int toPosition) {
try {
return (T) value;
} catch (ClassCastException e) {
throw new Ill
我遇到了一个难以解决的问题,我从包含CustomObject的第三方API调用中获得原始列表,并将该列表保存到字符串类型的genric列表中。
List<String> strList = getCustomObjectList();//This is third part API
which resturn raw List
现在我想得到list元素
String myStrValue = strList.get(0);
在这里,我得到了例外。
java.lang.ClassCastException:不能将com.some.CustomObject转换为java.lang.S
这是我偶然遇到的一个狭窄的例子。
看看下面的代码:
class Holder<T> {
private T t;
public Holder(T t) {
this.t = t;
}
public T getValue() {
return t;
}
}
public class FooMain {
private static Object newHolder() {
return new Holder<Integer>(3);
}
public st