小编cqu*_*zel的帖子

为什么在catch块中"throw"和"throw ex"的行为方式相同?

我读到在catch块中,我可以使用"throw"重新抛出当前异常.或"扔前";

来自:http://msdn.microsoft.com/en-us/library/ms182363%28VS.80%29.aspx

"要保留原始堆栈跟踪信息的异常,请使用throw语句而不指定异常."

但是当我尝试这个时

        try{
            try{
                try{
                    throw new Exception("test"); // 13
                }catch (Exception ex1){
                    Console.WriteLine(ex1.ToString());
                    throw; // 16
                }
            }catch (Exception ex2){
                Console.WriteLine(ex2.ToString()); // expected same stack trace
                throw ex2; // 20
            }
        }catch (Exception ex3){
            Console.WriteLine(ex3.ToString());
        }
Run Code Online (Sandbox Code Playgroud)

我得到三个不同的堆栈.我期待第一个和第二个跟踪是相同的.我究竟做错了什么?(或理解错误?)

System.Exception:在c:\ Program.cs中的ConsoleApplication1.Program.Main(String [] args)上测试:第13行System.Exception:在c:\ Program中的ConsoleApplication1.Program.Main(String [] args)进行测试. cs:第16行System.Exception:在c:\ Program.cs中的ConsoleApplication1.Program.Main(String [] args)进行测试:第20行

c#

13
推荐指数
1
解决办法
556
查看次数

kryo.readObject导致与ArrayList的NullPointerException

当我使用kryo反序列化ArrayList对象时,我得到一个NullPointerException.

Caused by: java.lang.NullPointerException   
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:215)   
at java.util.ArrayList.ensureCapacity(ArrayList.java:199)   
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:96)
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:22)    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:679)     
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)
Run Code Online (Sandbox Code Playgroud)

我可以看到StdInstantiatorStrategy在不调用其构造函数的情况下创建了一个ArrayList,而其中一个字段未初始化导致异常.

文档说首先应该调用无参数构造函数,如果没有可用的话,应该使用StdInstantiatorStrategy来进行字段初始化.

我究竟做错了什么?

java kryo

7
推荐指数
1
解决办法
3791
查看次数

标签 统计

c# ×1

java ×1

kryo ×1