2016-07-27 3 views
0

현재 개체가 X, Y, Z의 인스턴스인지 확인하고 몇 가지 방법을 적용합니다. (이것들은 단지 그림 :)입니다JAVA - 목록을 사용하여 여러 "instanceof"리 팩터링

내가 (예 : 비교 대상 300 개체가 그러나 경우
if (X instanceof Car || X instaceof Bus || ...) { 
    X.color = RED; 
} 

: 자동차, 버스, 자전거, 기차, 비행기, ...)가 어떻게 주위를 인수 분해 갈 것은? 목록이나 배열을 만들려고 생각했지만 초기화는 조금 길어 보입니다.

Car car = new Car(); 
Bus bus = new Bus(); 
... 
List<Transportation> list_t = Arrays.asList(car, bus, ...); 
for (Transportation t : list_t) { 
    if (X instance of t) 
     X.color = RED; 
} 

감사의 말을 전합니다.

+0

이러한 종류의 '면'이 있습니까? 클래스 계층 구조가 있습니까, 아니면 하위 클래스가있는 유형이 있습니까? – Bohemian

+0

방문자 패턴을 조사하고 싶을 수 있습니다. – Fildor

+0

왜''X.color = X.getColor();'? 그리고 나서 그것을 단순히'X.setColor();로 변경할 수 있습니다. 그런 다음 자동차, 버스 등을 항상 빨간색으로 유지함으로써 제거 할 수 있습니다. – immibis

답변

1

공통 상위 인터페이스를 사용합니다.

class Car implements DisplayColour { 
    public Color displayColor() { 
      return Color.RED; 
    } 

또는 모든 가능한 클래스를 알고 있다면 HashMap을 사용합니다.

static final Map<Class, Color> classToColorMap = new HashMap<>(); 
static { 
    classToColorMap.put(Car.class, Color.RED); 
} 
+0

나는 궁금하다. 어떤 객체가 클래스에 적절한 색상 기반을 반환 할 경우이를 일반화 할 수 있습니까? 예를 들어 기능이 있습니다. returnClassName (Object 객체) {className을 반환합니까?} . 나는 질문 자와 관련이 없다. 나는이 문제에 대해 흥미롭다. –

+0

@Optimuskck String className = object.getClass(). getName();'을 호출하거나 String className = object.getClass(). getSimpleName();을 호출 할 수 있습니다. –

+0

예. 하지만 내가 옳은 것을 이해하면 첫 번째 함수에서 묻는 것은 첫 번째 함수는 특정 개체 만 검사합니다. 내 말은 특정 객체에 대한 하드 코딩 없이는 우리가 특정 객체에 대한 검사를 일반화 할 수 없으며 특정 클래스에 속하고 다른 문자열을 반환한다는 의미일까요? . 그러나 나는 다른 질문을하는 것을 이해하기 시작합니다. 미안 해요. –