2010-10-18 4 views
2

Dans l'exemple suivant, une référence à reason est stockée dans parent et enfant. Je voudrais éviter cela et stocker la référence uniquement dans le parent (utilisation habituelle des exceptions Java). Comment initialiser un champ de classe parent sans stocker une valeur dans l'objet de classe enfant?Initialisation des champs parents

Répondre

8

Si vous n'utilisez jamais reason dans la classe FieldError, alors il ne sera pas stocké dans 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

Bonne réponse. Juste une légère correction - vous pouvez toujours l'utiliser dans le constructeur, par exemple pour l'imprimer. Tant que la référence n'est pas nécessaire plus tard pendant la durée de vie de l'objet (par exemple renvoyée par une méthode quelconque), elle ne sera pas stockée. – axel22

Questions connexes