Il est légal de le faire en Java:Comment puis-je exiger un argument de méthode dans Java pour implémenter plusieurs interfaces?
void spew(Appendable x)
{
x.append("Bleah!\n");
}
Comment puis-je faire (syntaxe non juridique):
void spew(Appendable & Closeable x)
{
x.append("Bleah!\n");
if (timeToClose())
x.close();
}
Je voudrais si possible de forcer les appelants à utiliser des objets qui sont à la fois Appendable et pouvant être fermé, sans nécessiter de type spécifique. Il existe plusieurs classes standard qui font cela, par ex. BufferedWriter, PrintStream, etc.
Si je définir ma propre interface
interface AppendableAndCloseable extends Appendable, Closeable {}
qui ne fonctionnera pas car les classes standard qui mettent en œuvre Annexable et Closeable ne mettent pas en œuvre mon interface AppendableAndCloseable (à moins que je ne comprends pas Java aussi bien que je pense que je fais ... les interfaces vides ajoutent encore l'unicité au-delà de leurs superinterfaces).
Le plus proche que je peux penser est de faire une des opérations suivantes:
choisir un interface (par exemple Annexable), et utiliser des tests d'exécution pour assurer l'argument est un
instanceof
les autres. Inconvénient: problème non détecté au moment de la compilation.nécessitent plusieurs arguments (prises à la compilation correcte, mais semble dorky):
void spew(Appendable xAppend, Closeable xClose) { xAppend.append("Bleah!\n"); if (timeToClose()) xClose.close(); }
Cela fait certainement défaut. Mais quelle est votre question exactement? – NawaMan