clase genérica con dos jerarquías de clases

Jorge Lavín :

Tengo la siguiente pregunta genéricos de Java

Tengo el siguiente parecían clase genérico puede ser esbozado como:

public class MyClass<T> {
    AnotherClass<T> another;
    OtherClass<T> other;
    ...
}

donde ...representa el código que no es relevante para el caso.

Para la clase MyClass<T>no es tan importante el tipo exacto Tes (a partir de ahora), pero para ambos:

  • AnotherClass<T>

  • OtherClass<T>

es absolutamente crucial que el tipo genérico es y las decisiones se hará en tiempo de ejecución en base a eso.

Basado en esto, el tipo Tno es completamente arbitraria, puede ser ya sea una instancia de una jerarquía de clases T_1o una jerarquía de clases T_2.

Como se define la clase, el tipo Tes equivalente a Object, pero sé que es equivalente a cualquiera de los dos T_1oT_2

No hay relación entre las entidades no businnes T_1y T_2por lo tanto no estoy haciendo:

public interface BaseT { ... }
public class T_1 implements BaseT { ... }
public class T_2 implements BaseT { ... }

public class MyClass<T extends BaseT>

Aclaración acerca de por qué el uso de un genérico si no están relacionados:

Estoy definiendo (tratando de) una clase genérica para ambos, porque incluso ellos no están relacionados especifique lo contrario, existe una relación implícita porque ambos T_1y T_2puede y aparecerá asociado a la entidad representada enMyClass

Tserá el mismo para MyClass, AnotherClassy OtherClassde manera que en un caso sólo habrá ya sea T_1o T_2pero nunca ambos al mismo tiempo.

Mi pregunta es, qué alternativas tengo aquí aparte de diseño de una interfaz para MyClasse implementarlo para ambos T_1y T_2?.

Puedo lograr algo así MyClass<T extends T_1 or T_2>?

Saludos cordiales

Robert Kock:

Probablemente, esto no es exactamente lo que tu estás buscando, pero que podría darle una oportunidad:

Crear una abstractclase genérica que implementa todo:

public abstract class MyClass<T>
{
  AnotherClass<T> another;
  OtherClass<T> other;

  // Add any code needed

}

A continuación, cree 2 clases genéricas para ambas clases de base.
Estas clases pueden ser vacío si todo el código se puede implementar en el abstracto:

public class MyT1Class<T extends T_1> extends MyClass<T>
{
}

public class MyT2Class<T extends T_2> extends MyClass<T>
{
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=176840&siteId=1
Recomendado
Clasificación