Essayer de définir une méthode d'accesseur pour le paramètre constructeur par défaut, c'est-à-dire: qui entraîne évidemment une erreur de compilateur: référence ambiguë à la définition surchargée, les deux Âge de la méthode en personne de type => int et valeur Âge en classe Personne de type Int Match Type attendu Int EM> P> est une solution dans ce contexte pour distinguer le nom de la méthode de membre et le nom de la valeur de l'élément généré automatiquement ? P> Bien sûr, il est possible de modifier le nom de l'un des identifiants, mais y a-t-il une solution dans ce scénario de spécifier en réalité que l'identifiant est référé? P> P>
4 Réponses :
Il suffit de mettre "Val" devant les paramètres du constructeur que vous souhaitez exposer en tant que propriétés d'instance. P>
Merci! Je me suis juste compris moi-même. :-) Mais si je voulais remplacer l'accessor par défaut? Je suppose que je devrais toujours renommer le paramètre?
Oui, vous devez renommer le param (E.g. Age0 code>), puis définissez l'accesseur DEF AGE = {MATH.ABS (AGE0) CODE>
Utilisez
class Person (var age: Int)
Les réponses ci-dessus sont excellentes WRT le principe d'accès uniforme. Si vous avez ou avez besoin de java style getters and Setters, vous pouvez également utiliser l'annotation BeanProperty.
def getAge: Int = age def setAge(age: Int) = this.age = age
Juste pour l'exhaustivité et pour développer les réponses précédentes, la technique est également couverte ici .
résumer, je commencerais toujours par une valeur immuable: p> puis, si vous comprenez que vous devez muter le valeur (ou vous le connaissez à l'avance), passez à: p> puis, si vous devez valider ou faire un autre calcul sur Obtenir ou définir, renommer votre variable et construire les accesseurs qui imitent votre nommage d'origine, pas besoin de refactoriser le reste du code: p> Bien sûr, vous pouvez simplifier soit Setter, soit getter si vous n'avez pas besoin d'opérations là-bas. . P> félicitations à toutes les autres réponses, qui sont bien correctes et sont venues beaucoup plus tôt. p> p>