notar que los enfoques depender de 'getClass()' en una instancia recibida con un tipo genérico obtendrá el tipo real de ese objeto, que no es necesariamente el tipo genérico - que sería el tipo por el cual el el llamador conocía la instancia.
Por ejemplo, considere el caso en que la persona que llama maneja un objeto por una interfaz; al pasar a constructos genéricos, el tipo genérico será la interfaz, no la clase real de la instancia.
Considere el ejemplo siguiente clase de "par", que permite que dos referencias a objetos que se devuelven a través de un POJO:
public class Pair<U,V>
{
public final U first;
public final V second;
public static <U,V> Pair<U,V> of (U first, V second)
{
return new Pair<U,V> (first, second);
}
protected Pair (U first, V second)
{
this.first = first;
this.second = second;
}
}
Estábamos teniendo en cuenta cómo modificar la función de la fábrica 'Pair.of()' para volver una clase derivada del par comparable, si U y V eran ambos comparables. Sin embargo, aunque podemos decir si 'primero' y 'segundo' son comparables usando instanceof, no sabemos que 'U' y 'V' son comparables.
Para que esto funcione, el tipo exacto de par devuelto por Pair.de() debe depender de los tipos genéricos, no los tipos de argumentos reales.
Puede obtener esto a través de la reflexión. PERO ... tenga en cuenta que si tiene que tratar sus datos de manera diferente según su tipo genérico, lo está haciendo mal. No deberías tener que hacerlo. Si es necesario, no es tan genérico como cree que es, y eso significa que hay un problema en su clase. – corsiKa
@glowcoder: Un ejemplo donde esto podría ser válido, lo cual me he encontrado a mí mismo, es acceder a una propiedad estática del tipo genérico. Una solución consiste en definir una instancia que nunca se usa realmente, como 'T obj;', por lo que puede decir 'obj.static_property' más adelante. Además, puede hacer '((T) null) .static_property'. – mellamokb
Si tiene un objeto de ese tipo, puede llamar al método 'getClass' en ese objeto. No estoy seguro si eso ayuda. –