无法从Object转换为char

时间:2014-04-30 08:10:23

标签: java casting

我的代码完全正常,但我仍然得到错误"无法从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
}

任何帮助(甚至指向我阅读)都会非常感激。

5 个答案:

答案 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包具有与每个原语对应的类:FloatfloatBooleanboolean ..

正如其他人已经说过的那样,您应该将对象转换为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;