带有null消息和原因的java.lang.ClassCastException

E.征费:

我使用Java 8进行项目

我们有一个与此类似的阴性测试:

public Integer g(Object data)
{
    try
    {
        Double d = (Double)data;
    }
    catch(ClassCastException ex)
    {
        if( ex.getMessage() == null )
        {
            return 1;
        }
    }
    return 0;
}

@Test
public void h()
{
    Integer count = 0;
    for( Integer idx = 0; idx < 100000; idx++ )
    {
        // The test
        count += g(0.7312345f);
    }
    System.out.println("Total ClassCastException's with null message: "+count);
}

否定测试期望带有消息“ java.lang.Float无法强制转换为java.lang.Double”的异常java.lang.ClassCastException,并且有时会得到空消息

我试图在eclipse中调试它,但是以某种方式将其附加到调试器后,异常和消息始终如预期

科拉迪克:

运行AxelH在OpenJDK 8中给出的完整示例,表明我的怀疑是正确的。

复制,因此它不会消失(他说他将删除):

public class Main{

    int cnt = 0, cntNull = 0;
    public static void main(String[] args) { 
        new Main().test();
    }

    public void test(){
        for( Integer idx = 0; idx < 200000; idx++ )
        {
            loseType(0.45642f, idx);
        }
        System.out.println(cnt + " error");
        System.out.println(cntNull + " null");
    }

    public void loseType(Object data, Integer i){
        try{
            gainType((Double)data);
        } catch(ClassCastException e){
            cnt++;
            if(e.getMessage() == null){
                cntNull++;
            }
        }
    }

    public void gainType(Double x){

    }
}

进行编译,javac Main.java然后使用java -Xmixed Main(与default相同java Main运行,并且您的异常通常具有空消息。运行它,java -Xint Main它永远不会null

原因是在混合模式下,它使用运行时解释器,直到编译该类,然后再移至该类,但是使用-Xint使其始终使用解释器,该消息始终存在。似乎已编译的本机代码存在一个错误,该错误会在没有正确消息的情况下创建异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为[Ljava.lang.String;

java.lang.ClassCastException

Collection.toArray()java.lang.ClassCastException

java.lang.LinkageError:ClassCastException

Jsf错误:java.lang.ClassCastException

java.lang.ClassCastException:android.widget.EditText

Kotlin:java.lang.ClassCastException:java.lang.Long无法转换为java.lang.Integer

带有MongoDB的Eclipselink java.lang.ClassCastException

java.lang.ClassCastException:[Ljava.lang.Object;

在还原视图阶段调试JSF java.lang.ClassCastException

java.lang.ClassCastException:创建同步的链表

运行时java.lang.ClassCastException

如何在Java中解决java.lang.ClassCastException?

原因:java.lang.ClassCastException:无法将java.lang.Class强制转换为java.lang.reflect.ParameterizedType

从SOAPFault提取错误消息时出现java.lang.ClassCastException

java.lang.ClassCastException关于在Java中创建类的数组

java.lang.ClassCastException:[Ljava.lang.String; 无法转换为java.lang.String

java.lang.ClassCastException-Log4j

如何在 Java 中修复 java.lang.ClassCastException

java.lang.ClassCastException:在 Web-DriverWait 中使用带有 POM 的 PageFactory 时

某些设备上的 java.lang.ClassCastException

java.lang.ClassCastException:错误

Spring with Querydsl :java.lang.ClassCastException

java.lang.ClassCastException in java(Springboot & Mongodb) in springboot get api

代理创建时的 java.lang.ClassCastException

dataset.collectAsList() 导致集群中的 java.lang.ClassCastException

randomSplit 期间的 scala java.lang.ClassCastException

java.lang.ClassCastException.如何删除?

获取 java.lang.ClassCastException