문제

그 시대 중 하나였습니다. 누군가가 나를 도와 줄 수 있습니다.

런타임의 속성을 비교하려는 2 개의 스톡 객체가 있습니다. 한 인스턴스는 캐시 된 인스턴스이고, 다른 인스턴스는 내 시스템으로 방금 전달 된 새로운 재고 인스턴스이며, 이는 캐시 된 인스턴스와 동일 할 수도 있고 아닐 수도 있습니다. 아래를 참조하십시오. M은 클래스 주식의 방법이며 주식은 주식의 사례입니다.

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) {
 }

편집 : 반사를 사용하는 이유에 대해 물었던 사람들을 위해 리버스 ajax 프레임 워크 DWR을 사용하고 있으며 HTML ID 속성을 내 객체 속성에 매핑하려고 시도하여 관련 HTML ID 값과 내 속성에 주석을 달 수 있습니다. 객체를 UI로 밀 때이 방법을 사용하면 전체 객체가 아닌 변경된 속성 만 푸시 할 수 있습니다.

도움이 되었습니까?

해결책

캐스트 할 필요가 없습니다. Java는 자동으로 올바른 것을 선택합니다 equals 방법. 나는 당신이 그 라인을 디버깅하여 무엇을 확인하는 것이 좋습니다 Class 각 객체입니다.

다른 팁

아니요, 캐스트 할 필요가 없습니다. 일반적으로 동등한 방법은 다음과 같습니다

@Override
public boolean equals(Object o){

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

   //other equality tests based on members
 }

캐시가 하나의 클래스 객체 만 보유하면 (즉, 파생 클래스를 캐싱하지 않음) 작동해야합니다. 스톡 캐시에 객체를 저장하는 것 같습니다. 어쩌면 그것은 너무 일반적이며 일부 기본 클래스 (아마도 스톡 클래스)로 좁히는 것이 더 나은 옵션 일 것입니다. 그런 다음 캐시 클래스에 정의 된 getter가 다음과 같습니다.

StockObject getStockObject(KeyType key);

이 외에도 반사는 과잉처럼 보입니다 (Alredy가 비교하고 싶은 물체를 가지고 있다면 반사를 사용하는 이유는 무엇입니까?)

캐스팅은 여기에 영향을 미치지 않습니다. 결과는 전적으로 Equals () 메소드가 재고 클래스에서 구현되는 방식에 따라 다릅니다.

그러나 왜 어쨌든 이것에 대해 반사를 사용하고 있습니까? 옳은 일이 아닐 것입니다.

이것을 살펴보십시오 :

http://code.google.com/p/simplestuff

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top