Maison >Java >javaDidacticiel >Comment puis-je faire référence au type actuel avec une variable de type en Java ?
En Java, il n'est pas possible de faire directement référence au type actuel avec un type variable. Le problème survient lorsque l'on tente d'écrire des méthodes capables de renvoyer une instance du type actuel, ce qui devient problématique lorsqu'il s'agit de sous-typage. Par exemple, déclarer une méthode générique avec le type de retour T dans une classe de base fera référence au type de classe de base dans les sous-classes, et non au type de sous-classe réel.
Pour résoudre ce problème, une limite récursive et une hiérarchie de classes abstraites peuvent être utilisées comme suit :
abstract class SelfTyped<SELF extends SelfTyped<SELF>> { abstract SELF self(); } class MyBaseClass<SELF extends MyBaseClass<SELF>> extends SelfTyped<SELF> { MyBaseClass() { } public SELF baseMethod() { return self(); } } final class MyLeafClass extends MyBaseClass<MyLeafClass> { @Override MyLeafClass self() { return this; } public MyLeafClass leafMethod() { return self(); } }
Dans cette approche, les classes feuilles résolvent le paramètre de type récursif SELF à leur propre type et implémente self(). Les classes Leaf peuvent être utilisées directement, permettant le chaînage de méthodes tout en préservant le type de retour correct :
MyLeafClass mlc = new MyLeafClass().baseMethod().leafMethod(); AnotherLeafClass alc = new AnotherLeafClass().baseMethod().anotherLeafMethod();
Attention : Cette technique s'appuie sur le modèle de modèle curieusement récurrent (CRT) et introduit certains risques :
À atténuez ces risques, assurez-vous que les classes impliquées ne sont pas extensibles publiquement et envisagez d'utiliser des constructeurs et des méthodes privés de package pour SelfTyped et self().
Bien que cette solution de contournement fournisse un moyen de référencer le type actuel, elle introduit une complexité et des limitations supplémentaires. Il est conseillé de peser soigneusement les avantages et les inconvénients potentiels avant de le mettre en œuvre. Dans les cas où le référencement de type explicite est crucial, cette solution peut être utile, mais évitez de vous y fier de manière excessive ou dans des API publiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!