2010-03-30 18 views
8

Quiero crear una clase que tome dos parámetros. Uno debe escribirse simplemente como T. El otro debe escribirse como algo que se extiende tanto como T como SomeInterface<T>. Cuando intento esto conExtendiendo T y SomeInterface <T> en Java

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

luego de Java se queja con

"El tipo T no es una interfaz, no se puede especificar como un parámetro acotado"

y si en lugar intento crear una interfaz de S con

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

luego se queja de Java con

"No se puede hacer referencia al parámetro de tipo T como un supertipo"

¿Hay alguna forma de hacerlo en Java? Creo que puedes hacerlo en C++ ...?

+2

Tenga en cuenta que las plantillas de C++ son mucho más poderosos que los genéricos de Java. El hecho de que se pueda hacer en C++ no significa que se pueda hacer en Java. –

+0

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

Respuesta

3

No se puede crear una interfaz que amplíe el parámetro de tipo T ya que no existe un contrato que garantice que T sea una interfaz. Y, por supuesto, la interfaz que extiende una clase no está permitida.

+0

¿Pero hay alguna manera de eludir esto para obtener el mismo efecto? –

3

esto funciona si se amplía una interfaz así:

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

pero tal vez no es exactamente lo que quiere ...

Cuestiones relacionadas