2010-10-18 3 views
2

В следующем примере ссылка на reason хранится как в родительском, так и в дочернем. Я бы хотел избежать этого и сохранить ссылку только в родительском (обычное использование исключений Java).Инициализация родительских полей

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

Как инициализировать родительское поле класса без сохранения значения в объекте дочернего класса?

ответ

8

Если вы никогда не используете reason в классе FieldError, то он не будет храниться в 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

Смежные вопросы