Ho bisogno di avere una variabile in una classe che è un'istanza di classe "ClasseA" ma che implementa anche l'interfaccia "InterfaceI".Variabile membro che deve estendere la classe A e implementare alcune interfacce
Ovviamente questo può essere fatto per l'uno o l'altro facilmente:
private ClassA mVariable;
private InterfaceI mVaraible;
ma come faccio a far rispettare l'oggetto sia estende ClassA e implementa InterfaceB? Qualcosa di simile:
private <? extends ClassA & InterfaceI> mVaraible;
è ciò di cui ho bisogno ma non ho idea della sintassi o se è addirittura possibile. Ho anche bisogno di un get e il metodo set, ma che può essere fatto con i generici (credo?)
La soluzione più ovvia è
public class ClassB extends ClassA implements InterfaceI{
//whatever here
}
Comunque sia InterfaceI e ClasseA fanno parte di un libary esterna, questo libary ha classi che estendono ClassA e InterfaceI e non posso modificarle per farle estendere ClassB, quindi questa soluzione non funzionerà.
Non è possibile, in fondo. È possibile controllarlo quando si imposta la variabile, quindi eseguire il cast quando è necessario ... ma non è possibile esprimere tale vincolo sulla variabile stessa, senza rendere generica la classe. –
c'è un po 'di magia in Java8 per consentire l'ereditarietà multipla, o una sorta di mix-in ... – Thufir
@Jon Skeet Come verificherai quando imposti la variabile? – jtedit