8
votes

Comment définir la méthode accessor pour le paramètre constructeur par défaut?

Essayer de définir une méthode d'accesseur pour le paramètre constructeur par défaut, c'est-à-dire: xxx

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

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 ?

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é?


0 commentaires

4 Réponses :


16
votes

Il suffit de mettre "Val" devant les paramètres du constructeur que vous souhaitez exposer en tant que propriétés d'instance.


2 commentaires

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 ), puis définissez l'accesseur DEF AGE = {MATH.ABS (AGE0)



6
votes

Utilisez

class Person (var age: Int)


0 commentaires

3
votes

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


0 commentaires

1
votes

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: xxx

puis, si vous comprenez que vous devez muter le valeur (ou vous le connaissez à l'avance), passez à: xxx

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: xxx

Bien sûr, vous pouvez simplifier soit Setter, soit getter si vous n'avez pas besoin d'opérations là-bas. .

félicitations à toutes les autres réponses, qui sont bien correctes et sont venues beaucoup plus tôt.


0 commentaires