Pregunta

Ha sido uno de esos días en que alguien me puede ayudar con esto.

Tengo 2 objetos de stock con los que quiero comparar propiedades en tiempo de ejecución. Una instancia es la instancia en caché, la otra es una nueva instancia de stock que acaba de ser entregada a mi sistema, que puede o no ser igual a la instancia en caché. Vea a continuación donde m es un método de la clase Stock y stock es una instancia de Stock

try {

// I want to compare these two objects, return type of m may vary
Object result = m.invoke(stock);
Object cacheResult = m.invoke(stockCache.get(ticker));

// The return type of m may vary but is known at runtime
Class returnType = m.getReturnType();

// I assume I need to cast before .equals() will work correctly
if(result.equals(cacheResult)) {
    // Will this work or do I need to cast
}

  }catch (Exception ex) {
 }

EDITAR: Para aquellos que han preguntado por qué estoy usando la reflexión, estoy usando el DWR de framework ajax inverso y estoy tratando de asignar una propiedad de identificación html a mis propiedades de objeto, lo que me permite anotar mis propiedades con su HTML asociado valor de identificación Al insertar el objeto en la interfaz de usuario, este método me permitirá insertar solo propiedades que han cambiado y no todo el objeto.

¿Fue útil?

Solución

No deberías necesitar lanzar. Java elegirá automáticamente el método equals correcto. Le recomiendo que depure esa línea para ver qué Clase es cada objeto.

Otros consejos

No, no necesitas lanzar. Normalmente, el método igual se ve

@Override
public boolean equals(Object o){

   if (! o instance of ThisClass){
      return false;
   }

   //other equality tests based on members
 }

Si su caché contiene solo una clase de objetos (es decir, no almacenar en caché las clases derivadas), debería funcionar. Parece que está almacenando objetos en su StockCache. Tal vez eso sea un poco demasiado genérico, y reducirse a alguna clase base (tal vez StockClass) sería una mejor opción. Entonces, su captador sería, definido en su clase de caché sería:

StockObject getStockObject(KeyType key);

Además de esto, la reflexión parece una exageración (si ya tiene los objetos que desea comparar, ¿por qué usar la reflexión?)

El lanzamiento no tendrá ningún efecto aquí. El resultado depende completamente de cómo se implementa el método equals () en la clase Stock.

Pero, ¿por qué estás usando la reflexión para esto de todos modos? Es muy probable que no sea lo correcto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top