web-dev-qa-db-fra.com

Quel est le mot clé `open` pour les champs dans Kotlin?

En Kotlin, open est identique à final in Java pour les classes et les méthodes.

Que me donne open dans la classe suivante pour le champ marqué comme open?

@MappedSuperclass
abstract class BaseEntity() : Persistable<Long> {
     open var id: Long? = null
}

mis à jour il ne s'agit pas d'un doublon de Quelle est la différence entre "ouvert" et "public" dans Kotlin?

Je suis intéressé par le mot clé open pour les propriétés

mis à jour

open la classe peut être héritée.
open le plaisir peut être remplacé
La propriété val est un champ final en Java

qu'en est-il de la propriété open?

27
M.T

Comme vous l'avez dit, le mot clé open vous permet de remplacer des classes, lorsqu'elles sont utilisées dans la déclaration de classe. En conséquence, la déclaration d'une propriété sous la forme open permet aux sous-classes de remplacer la propriété elle-même (par exemple, redéfinir le getter/setter). Ce mot clé est obligatoire car dans Kotlin, tout est "final" par défaut, ce qui signifie que vous ne pouvez pas utiliser override (quelque chose de similaire à C #, si vous avez de l'expérience avec cela).

Notez que votre classe est implicitement déclarée comme open puisqu'il s'agit de abstract. Par conséquent, vous ne pouvez pas créer directement d'instance de cette classe.

23
user2340612

méthode finale en Java: Une méthode qui ne peut pas être remplacée.

classe finale en Java: Une classe qui ne peut pas être étendue.

Les classes et méthodes ouvertes dans Kotlin sont équivalentes à l'opposé de final en Java, une méthode ouverte est redéfinissable et une classe ouverte est extensible dans Kotlin.

12
Lajos Arpad