Par exemple, disons que ceci est ma classe abstraite:Comment puis-je m'assurer que la fonction de ma classe abstraite ne peut fonctionner que sur des extendeurs du même type que l'appelant?
abstract class A{
int x;
int y;
void foo(A fooMe);
}
... et B
et C
sont deux classes qui se prolongent A
.
Ce que je veux est pour B
être seulement capable d'appeler foo()
sur d'autres B
s, et pour C
être seulement capable d'appeler foo()
sur d'autres C
s. Mais je veux que ce soit hors des mains du programmeur qui étend ma classe A
- c'est-à-dire, je veux un moyen d'assurer cette fonctionnalité dans le code A
seul.
Que puis-je faire? (Si possible) Je voudrais éviter tout piratage ou génériques solution qui est trop désordonné - je veux encore foo
pour pouvoir être appelé comme celui-ci, par exemple:
B b=new B();
B bb=new B();
bb.foo(b);
Modifier: I Je suis maintenant prêt à accepter une solution qui utilise des génériques, si quelqu'un a des idées ... (je ne pouvais pas penser à un)?
(+1) C'est une bonne idée. J'utiliserai certainement ceci si je ne peux pas trouver une autre solution - bien que de façon optimale je voudrais avoir une telle erreur repérée au moment de la compilation, et pas au moment de l'exécution. – Cam
@incrediman, malheureusement je ne crois pas que vous puissiez l'obtenir au moment de la compilation, au moins sans les génériques désordonnés que vous voulez éviter, c'est-à-dire de manière à laisser votre simple exemple de code fonctionner (mais je vous écouterai j'espère que j'ai tort! -) –
Hm. Bien que votre solution évite les génériques comme je l'ai demandé, je pense que je préférerais qu'il utilise des génériques (même malpropres) que de ne pas attraper des choses au moment de la compilation. Je vais regarder un peu moi-même et poster si je trouve quelque chose. Merci encore! – Cam