2010-10-18 73 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