¿Cómo puedo obtener un valor de propiedad dentro de un método heredado en una clase genérica?
Frecuentes
Visto 56 veces
2
Estoy escribiendo un código como el siguiente y necesito obtener un valor de una clase secundaria a partir de un método estático de la clase principal.
¿Alguien puede ayudarme a resolverlo? Gracias de antemano.
public abstract class DataObject<T>{
public static int GetAllTotal(){
// How can I obtain a T propery called "code" = "001".
int cont = SQL.getTotalFromQuery(
"SELECT * from tblProducts where code = '001'"
);
return ffff
}
...
}
public class Product extends DataObject<Product>{
private String code = "001";
public Product(){
}
}
...
Product.GetAllTotal();
4 Respuestas
1
necesitas usar lo siguiente:
super.GetAllTotal();
En la clase infantil (derivada).
Dónde super
es la referencia del padre de una clase derivada en Java.
contestado el 22 de mayo de 12 a las 17:05
¿Hay alguna forma de hacerlo sin crear un método en la clase secundaria? - user1410626
Sí, puedes llamar desde el constructor
de la clase secundaria y asígnelo a un campo de clase para usarlo más adelante. - Cabeza de jengibre
¿Hay alguna forma de obtener una instancia de T dentro del método GetAllTotal? ¿Quizás Reflexión? - user1410626
1
En primer lugar, necesitará un objeto de la clase para poder acceder a los miembros dinámicamente desde un método estático.
Entonces podrías definir un público getCode()
función en el padre que reemplaza en la clase secundaria que devuelve el valor de la code
variable miembro.
contestado el 22 de mayo de 12 a las 17:05
¿Qué pasa con la reflexión en el método GetAllTotal? ¿Puedo saber que Product.GetAllTotal() proviene de la clase Product? Si es posible, ¿puedo crear una instancia de Producto? - user1410626
@ user1410626 - Es posible, pero es lento, feo y propenso a errores. Y debe restringir la visibilidad de GetAllTotal()
a protected
si puedes. En cuanto a la creación de la instancia usted mismo, es posible que no obtenga el valor de código que necesita. ¿Qué tal si vamos con la sugerencia en mi respuesta y agregamos un DataObject
parámetro para GetAllTotal()
? Tendrá que lidiar con las advertencias sobre llamadas no verificadas, pero parece el mal menor: Attila
@ user1410626 - también, debe GetAllTotal()
ser estático? - Attila
Sí... "Necesito" que GetAllTotal sea estático. Quiero que todas las clases que son una herencia de DataObject tengan algún método estándar. Por ejemplo, Product tiene una propiedad que contiene el nombre de la tabla DDBB. Ese es el parámetro que necesito en GetAllTotal. ¿Funcionaría si esa propiedad es estática? - user1410626
Si hizo que la función no fuera estática y definió un getCode()
(y cualquier otra cosa que necesites) en DataObject
, luego anuló esa función en la clase secundaria, obtiene el comportamiento que desea sin los problemas que enfrenta al intentar usar una función estática. Los miembros estáticos están vinculados a la clase y no funcionan bien con la herencia: Attila
0
usa la palabra clave super
para acceder a la referencia de la clase padre. En tu caso,
super.GetAllTotal();
contestado el 22 de mayo de 12 a las 17:05
0
¿No podemos parametrizar el método GetAllTotal para aceptar un argumento, o hay alguna restricción para cambiar la definición del método?
GetAllTotal(String code)
contestado el 22 de mayo de 12 a las 18:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java generics multiple-inheritance or haz tu propia pregunta.
Esto probablemente no debería ser estático, ya que no funcionará muy bien con la herencia. - Louis Wasserman
Por cierto, los nombres de los métodos de Java no deben escribirse en mayúscula. - Robin