2010-07-19 7 views
4

Cette question est tellement stupide ... En tout cas, je ne trouve pas la bonne information, parce que chaque classe d'exemple Scala-constructor que je vois fonctionne avec au moins un paramètre.Comment définir un constructeur sans paramètre dans Scala

Je veux avoir cette classe traduit de Java Scala:

public class SubscriptionConverter extends Converter { 
    public SubscriptionConverter() { 
    Context ctx = new InitialContext(); 
    UserEJB userEJB = (UserEJB) ctx.lookup("java:global/teachernews/UserEJB"); 
    } 
    (...) 
} 

donc je ne dispose que d'un constructeur sans paramètre. Je me suis amusé avec Scala(), mais je n'ai pas pu obtenir un exemple similaire à celui ci-dessus. Comment puis-je écrire cela dans Scala?

Répondre

11

Toutes les instructions déclarées au niveau de la classe sont exécutées dans le cadre du constructeur par défaut. Donc, vous avez juste besoin de faire quelque chose comme ceci:

class SubscriptionConverter extends Converter { 
    val ctx = new InitialContext 
    val userEJB = ctx.lookup("java:global/teachernews/UserEJB") 
    (...) 
} 
+0

Et vous voudrez probablement déclarer ces vals 'private' - sinon ce seront des champs publics. –

+1

Notez que l'exemple ci-dessus ne produit pas le même effet que le code de la question. Dans ce code, les variables sont locales à la portée de la méthode, alors qu'ici elles entrent dans chaque instance de l'objet. Le 'local' de Scala 2.8 pourrait être utilisé ici pour introduire un bloc. –

+0

@ Daniel où puis-je en savoir plus sur les environs? N'a pas trouvé d'information, pas même dans la référence de langue 2.8 – ifischer

4

@dbyrne a couvert les parties les plus importantes, mais je vais ajouter quelques détails secondaires.

  1. Si une classe n'a aucun paramètre et qu'elle est immuable, pensez à la déclarer comme un objet à la place.
  2. Le constructeur défini par des instructions au niveau de la classe et par des listes de paramètres après le nom de la classe est connu comme le constructeur principal . * Les constructeurs auxiliaires * sont définis par def this() = .... Contrairement à Java, chaque constructeur auxiliaire doit déléguer au constructeur principal.
  3. Lorsque vous déclarez un constructeur principal avec des listes de paramètres nuls, le compilateur ajoute automatiquement une seule liste de paramètres vide. Si vous définissez un constructeur avec une liste de paramètres implicite, le compilateur ajoutera une liste de paramètres vide avant cela.
Questions connexes