2014-10-04 6 views
0

저는 두 가지 클래스 (예 : 자동차 및 자전거)를 가지고 있습니다. 두 클래스의 객체는 관리 레이어로 보내지며 관리 레이어에서 사용됩니다. layerHandler.objectReceived (object);를 호출하여 모든 객체를 해당 레이어로 보냅니다.overriden toString() 메서드는 항상 object에 대해 동일한 값을 반환합니까?

LayerHandler는

LayerHandler이 actionFired (문자열이라는 다른 방법이 있습니다 (저장 될 객체가없는 동일한 유형이 있기 때문에 메신저 (자동차 및 자전거)를 개체를 사용하여)의 HashMap에이 객체를 저장할 필요 메시지, 객체 객체); 두 번째 매개 변수 'object'는 Car 또는 Bicycle 클래스에 속하며 LayerHandler의 HashMap에 이미 저장되어 있습니다. 이 메소드가 발생하면 HashMap에 저장된 관련 객체를 찾아야합니다.

지금은 object.toString()을 hashmap의 키 값으로 사용하고 있습니다. 두 가지 유형의 객체 모두 defaut toSting() 메서드를 사용하며이 메서드는 재정의되지 않습니다.

여기 내 프로젝트의 전체 구조를 표시하지는 않지만, 이유는 HashMap을 사용하고 있습니다. (ArrayList get (Object obj) 메서드는 여기 좋을 것입니다 만, HashMap을 사용해야합니다.)

toString()은 항상 시간이 지남에 따라 변경되지 않는 동일한 값을 반환하는지 여부를 알아야합니다. 그것을 내 HashMap의 키로 사용하십시오.

+0

해시 맵에 저장하는 객체의 구현. –

+0

JAVA에서 제공하는 객체의 해당 클래스 이름을 식별하려면 object_name.getClass(). getName()을 사용합니다. 이 논리를 사용하여 오브젝트가 TYPE Car 또는 Bycycle인지 여부를 판별 할 수 있습니다. 내가 너를 도왔기를 바래. – Programmer

답변

0

.toString()을 재정의하지 않은 경우 주어진 인스턴스에 대해 인스턴스 수명 기간 동안 동일한 문자열을 계속 반환합니다. 그러나 일단이 인스턴스가 가비지 수집되면이 클래스의 다른 인스턴스 나 다른 클래스가 동일한 메모리 블록에 할당되고이 인스턴스와 동일한 문자열을 반환 할 가능성이 있습니다.

String을 키로 사용하는 대신 actionFired을 변경하여 문자열 표현이 아닌 객체를 제공하는 것이 좋습니다. 이런 식으로 매우 깨지기 쉽고 나중에 구현이 변경되면 모두 중단 될 수 있습니다.

+0

좋아요, 코드 수정을 시도 할게요. 답변 해 주셔서 감사합니다. 그게 정확히 내가 필요한 대답이다. 나는 그것을 받아 들인 것으로 표시 할 것이다. –

0

hashCode + equals의 올바른 구현을 제공하는 경우 HashMap에 다른 유형의 키를 사용하는 데 제한이 없습니다.

  1. 당신은 +이 키 객체 클래스의 메소드와 동일한 해시 코드를 오버라이드 (override) 할 필요가 (자동차, 자전거, ...)
  2. 당신의 HashMap에 키로서 직접 이러한 개체를 사용하여 대답은에 따라
관련 문제