我的代码完全正常,但我仍然得到错误"无法从Object转换为char"我想知道是否有人可以向我解释问题是什么,以及我是否可以采用另一种不会导致错误的方式。
这是导致错误char op = (char) term;
的代码。它是从中缀到后缀转换器
//Take terms off the queue in proper order and evaluate
private double evaluatePostfix(DSAQueue<Object> postfixQueue) {
DSAStack<Double> operands = new DSAStack<Double>();
Object term;
//While still terms on queue, take term off.
while(!postfixQueue.isEmpty()) {
term = postfixQueue.dequeue();
if(term instanceof Double) { //If term is double put on stack
operands.push((Double) term);
}
else if(term instanceof Character) { //If term is character, solve
double op1 = operands.pop();
double op2 = operands.pop();
char op = (char) term;
operands.push(executeOperation(op, op2, op1));
}
}
return operands.pop(); //Return evaluated postfix
}
任何帮助(甚至指向我阅读)都会非常感激。
答案 0 :(得分:6)
您可以更改此行:
char op = (Character) term;
说明:在Java 6 中,您无法将Object
强制转换为基本类型,但可以将其强制转换为Character
(这是一个类)和拆箱完成其余的事情:))
修改强> 或者,您可以将项目的语言级别提升到 Java 7 (或8 ...)
答案 1 :(得分:0)
Java无法在一次操作中自动取消装箱和投射,这正是您尝试做的事情。相反,将其强制转换为Character
,java会自动将其取消包装:
char op = (Character) term;
答案 2 :(得分:0)
您无法 从对象转换为原始数据类型(反之亦然)。它们是两个非常不同的东西。
Java lang
包具有与每个原语对应的类:Float
为float
,Boolean
为boolean
..
正如其他人已经说过的那样,您应该将对象转换为Character
而不是char
。
答案 3 :(得分:0)
你必须改变
char op = (Character) term;
因为您必须使用类引用进行强制转换而不使用基元类型。
答案 4 :(得分:0)
您的代码没有任何问题。由于term是Character的一个实例,如果使用jdk 1.5 +
,你甚至可以直接指定它而不作为char op = term进行转换我可以看到的一种可能性是使用的编译器合规性级别。您可能拥有JDK 1.5+但您正在较低级别编译项目。如果您在Project-&gt; properties-&gt; Java Compiler中使用eclipse检查JDK合规性级别
如果您正在直接编译或使用Ant构建检查-source&amp; - 目标选项。
只是为了您的信息,据我所知,在JDK 1.7中引入了对原始转换的对象。因此,如果您使用的是JDk 1.7+,那么就可以了。
Object term = 'C';
char op = (char) term;