2012-01-10 4 views
2

Je crée des classes de cas dans Scala que j'utilise pour conserver les données mongodb. L'application client est écrite en Java et utilise mon référentiel en passant des instances de ces classes de cas.Comment créer une API Java pour les classes de cas avec des champs optionnels

Il fonctionne très bien, à moins d'utiliser des champs optionnels:

case class Person (name: String, email: Option[String]) 

maintenant de Java Je ne veux pas faire référence à l'option de Scala, donc je préfère passer outre un constructeur qui permet au client d'appeler quelque chose comme

new Person("Jack", "[email protected]"); 

Une méthode d'usine sur l'objet compagnon serait également OK. Je suis à la recherche d'une solution qui me permet d'écrire Java sans aucun scala deps, de préférence pas plus compliqué que d'appeler un constructeur. Pensées?

+0

Comment les appelants Java pourraient-ils indiquer un courriel manquant? Un autre constructeur ou (shudder) null? –

Répondre

1

Pourquoi est-ce insuffisant?

case class Person (name: String, email: Option[String]) { 
    def this(name: String, email: String) { 
     this(name, Option(email)) 
    } 
} 

Certes, il utilise encore Option[String], mais il reste invisible pour le client. Le seul problème est que le code client Java verra toujours les deux constructeurs.

+0

Encore mieux, vous pourriez faire du constructeur par défaut un [nom de fichier] privé et ensuite le client verrait seulement l'autre constructeur (en supposant que vous n'ayez pas de clients Scala). – Submonoid

+0

J'ai eu la chance de me débarrasser de l'exigence de Java, donc je ne me souviens pas pourquoi le simple constructeur n'était pas assez bon. J'ai commencé là et j'ai abandonné ce chemin pour une raison quelconque. Je recommencerais si jamais ça arrivait. – iwein

+0

Ah, je viens de récupérer le problème: salat (le framework que j'utilise pour l'intégration de MongoDB) n'aime pas plusieurs constructeurs et échouera à faire ses conversions si vous en avez. – iwein

Questions connexes