2010-03-30 11 views
8

Voglio creare una classe che accetta due parametri. Uno dovrebbe essere digitato semplicemente come T. L'altro dovrebbe essere digitato come qualcosa che estende sia T che SomeInterface<T>. Quando tento questo conEstensione di T e SomeInterface <T> in Java

public class SomeClass<T, S extends SomeInterface<T> & T> 

poi Java si lamenta con

"Il tipo T non è un'interfaccia, ma non può essere specificato come parametro limitata"

e se invece tento di creare un interfaccia per S con

public interface TandSomeInterface<T> extends SomeInterface<T>, T 

poi Java si lamenta con

"Impossibile riferirsi al parametro tipo T come supertipo"

C'è un modo per farlo in Java? Penso che puoi farlo in C++ ...?

+2

Si noti che i modelli C++ sono molto più potente di generici Java. Solo perché può essere fatto in C++, non significa che possa essere fatto in Java. –

+0

correlati: http://stackoverflow.com/a/13261667/697449 –

risposta

3

Non è possibile creare un'interfaccia che estenda il parametro di tipo T poiché non esiste un contratto che possa garantire che T sia un'interfaccia. E naturalmente l'interfaccia che estende una classe non è consentita.

+0

Ma c'è un modo per aggirare questo per ottenere lo stesso effetto? –

3

questo funziona se si estende un'interfaccia così:

public class SomeClass<T extends I, S extends SomeInterface<T> & I> 

ma forse non è esattamente quello che vuoi ...

Problemi correlati