Quiero escribir el código Java equivalente de un código C#.Java: crea un objeto cuyo tipo es un parámetro de tipo
Mi código C# es la siguiente:
public abstract class A<T> where T : A<T>, new()
{
public static void Process()
{
Process(new T());
}
public static void Process(T t)
{
// Do Something...
}
}
public class B : A<B>
{
}
public class C : A<C>
{
}
equivalente Java de mi código es el siguiente.
public abstract class A<T extends A<T>>
{
public static <T extends A<T>> void process()
{
process(new T()); // Error: Cannot instantiate the type T
}
public static <T extends A<T>> void process(T t)
{
// Do Something...
}
public class B extends A<B>
{
}
public class C extends A<C>
{
}
}
Aquí el "nuevo()" sintaxis en las fuerzas de declaración de clases clases para escribir un constructer por defecto que hace posible llamar "nueva T()" de la clase base derivados. En otras palabras, cuando escribo la clase base, estoy seguro de que la clase derivada tendrá un constructer predeterminado, de modo que pueda instanciar un objeto de clase derivado de la clase base.
Mi problema en Java es que no puedo instanciar un objeto de clase derivado de superclase. Recibo el error "Cannot instantiate the type T"
para llamar a "new T()"
. ¿Hay alguna forma similar a C# en Java o debería usar algo como patrón de prototipo y clonación?
Gracias por la respuesta rápida. Como intento crear una nueva instancia dentro de un método estático, no puedo hacer una llamada getClass(). Además, T.class no existe debido a la construcción en tiempo de compilación. Entonces, la reflexión no parece ser una solución para mí. O no lo pude encontrar aún (: –
Esto solo funcionará si la subclase usa un parámetro de tipo concreto. Si la subclase fuera 'public class B extends A ' por ejemplo, esto tendría exactamente el mismo problema. Lo encuentro es mejor usar los tokens de tipo pero requerir que quien llama pase el token al constructor o método. –