2010-10-18 76 views
2

在以下示例中,对reason的引用存储在父级和子级中。我想避免这种情况,并将引用存储在父项中(通常使用Java异常)。父字段初始化

import java.lang.{Exception, Throwable} 
class FileError(message: String, reason:Throwable) extends Exception(message, reason) { 
    ... 
} 

如何在不存储子类对象中存储值的情况下初始化父类字段?

回答

8

如果您从未在FieldError类中使用reason,那么它将不会存储在FieldError中。

import java.lang.{Exception, Throwable} 
class FileError(message: String, reason:Throwable) extends Exception(message, reason) 

-

[email protected] ~ $ scalac -print test.scala 
[[syntax trees at end of cleanup]]// Scala source: test.scala 
package <empty> { 
    class FileError extends java.lang.Exception with ScalaObject { 
    def this(message: java.lang.String, reason: java.lang.Throwable): FileError = { 
     FileError.super.this(message, reason); 
    () 
    } 
    } 
} 
+2

很好的回答。只是稍作修改 - 你仍然可以在构造函数中使用它,例如打印它。只要在对象的生命周期中不再需要引用(例如由某种方法返回),它就不会被存储。 – axel22 2010-10-18 09:05:42