type parameter method generico generic java android generics

java - parameter - Clase genérica que amplía la clase e implementa la interfaz



java generics (3)

Para reducir la dependencia de la clase, deseo enviar el parámetro (usando la clase genérica) al constructor que amplía alguna clase e implementa la interfaz, por ejemplo

public interface SomeInterface{ public void someMethod(); } public class MyFragment extends Fragment implements SomeInterface{ //implementation } //here is classs, that I need to create. T must extend Fragment and implements //SomeInterface. But, I''m afraid, if I''ll use MyFragment directly, it will create a //dependence of SomeClass from MyFragment. public class SomeClass /*generic?*/ { public SomeClass(T parent); }

¿Es posible?

Además, usando mi clase T, quiero crear vistas, usando T.getActivity () como Contexto.


T debe extender Fragmento e implementar SomeInterface

En ese caso, podría declarar SomeClass como el siguiente:

public class SomeClass<T extends Fragment & SomeInterface>

Eso requeriría un objeto de tipo T para extender Fragment e implementar SomeInterface .

Además, usando mi clase T, quiero crear vistas, usando T.getActivity () como Contexto.

No estoy familiarizado con Android, pero si getActivity() es un método de instancia pública declarado en Fragment , será totalmente posible llamarlo a una instancia de T , ya que el compilador sabrá que todas las T deben heredar ese método.


¿Quieres hacer algo como esto?

class SomeClass {} interface SomeInterface{ public void someMethod(); } class AGenericClass<T> extends SomeClass implements SomeInterface { public void someMethod() {} }

Esto está permitido.

Pero, ¿qué es Android específico sobre tu pregunta? Creo que me debe estar perdiendo algo, así que ¿puedes proporcionar más detalles?

actualizar a continuación

Todavía no estoy totalmente seguro de lo que quiere hacer, y tampoco estoy seguro de que deba preocuparse por la dependencia de inmediato, pero esto también es legal, utilizando parámetros de tipo delimitados :

interface SomeInterface{ public void someMethod(); } class Fragment { public void aMethodInFragment() { } } public class SomeClass <T extends Fragment & SomeInterface> { public SomeClass(T parent) { parent.someMethod(); parent.aMethodInFragment(); } }

El parámetro de tipo <T extends Fragment & SomeInterface> especifica que T debe ser una subclase de Fragment e implementar SomeInterface .


Es fácil si entiendo que lo corrigen para que tenga algún tipo T que extienda Fragmento e implemente alguna interfaz. Entonces tienes que escribir algo así.

abstract class TemplateFragment extends Fragment implements SomeInterface{}

y luego en tus clases

class SomeClass<T extends TemplateFragment> { ... }

Hará el truco.