Il est légal de le faire en Java:
void spew(Appendable x)
{
x.append("Bleah!\n");
}
Comment puis-je faire cela (la syntaxe n'est pas légal):
void spew(Appendable & Closeable x)
{
x.append("Bleah!\n");
if (timeToClose())
x.close();
}
Je voudrais, si possible, à force de les appelants à utiliser des objets qui sont à la fois Appendable et Fermer, sans exiger d'un type spécifique. Il y a plusieurs classes standard, que faire, par exemple, BufferedWriter, PrintStream, etc.
Si je définir ma propre interface
interface AppendableAndCloseable extends Appendable, Closeable {}
qui ne fonctionne pas puisque la norme classes qui implémentent Appendable et Fermer ne pas mettre en œuvre mon interface AppendableAndCloseable (à moins que je ne comprends pas Java et je pense que je fais... vide interfaces toujours ajouter un caractère unique au-dessus et au-delà de leur superinterfaces).
Le plus proche que je peux penser à est de faire l'une des opérations suivantes:
choisir une interface (par exemple, Appendable), et l'utilisation d'exécution des tests pour s'assurer que l'argument est un
instanceof
autres. Bémol: le problème n'est pas pris au moment de la compilation.-
besoin de plusieurs arguments (prises au moment de la compilation de l'exactitude, mais semble ringard):
void spew(Appendable xAppend, Closeable xClose) { xAppend.append("Bleah!\n"); if (timeToClose()) xClose.close(); }