2012-10-17 2 views
7

다음은 내 문제의 추상적 인 예입니다. 일반 클래스 (Car)의 유형이 (brand)입니다. 모든 객체는 브랜드 별로만 다르고이 브랜드를 기반으로 다르게 처리되어야합니다.enum 유형을 기반으로 특정 메소드를 호출 하시겠습니까?

이 클래스의 모든 객체는 서비스 클래스 목록에 수집됩니다. 서비스는 이 대부분 인 루틴을 전체 목록에서 수행해야합니다. 사이에 하나의 함수 호출 만 달라야합니다.

이 형식을 기반으로 다른 메서드를 호출하고 싶습니다. 현재 열거 형에 대해 같음을 나타내고 결과에 따라 다른 메서드를 호출합니다. 그러나 이것은 좀 못생긴 것이고 이것에 대한 더 나은 해결책이 있는지 궁금합니다.

class Car { 
    public enum Brand { 
     BMW, AUDI; 
    } 

    private Brand brand; 

    specificMeth1(); 
    specificMeth2(); 
} 


class Service { 

    List<Car> bmw; 
    List<Car> Audi; 

    processCar() { 
     processList(bmw); 
     processList(audi); 
    } 

    processList(List<Car> list) { 
     for (Car car : list) { 
      if (car.getBrand.equals(Brand.BMW)) { 
       specificMeth1(); 
      } else { 
       specificMeth2(); 
      } 
     } 
    } 
} 
+0

Sidenote : '평등'을 사용할 필요가 없습니다.)'열거 형. 'car.getBrand() == Brand.BMW'는 잘 동작합니다. –

답변

24

당신은 열거의 방법을 넣어해야합니다

public enum Brand { 
    BMW { 
     @Override 
     public void doSomething(); 
    }, 
    AUDI { 
     @Override 
     public void doSomething(); 
    }; 

    public abstract void doSomething(); 
} 

var.getBrand().doSomething(); 
+1

좋은 답변 +1. – Juvanis

+1

당신은 빠르다! –

+0

대체 어디입니까 +5? – sErVerdevIL

4

그래서 같이 열거에 추상 방법을 정의 고려 :

public enum Brand { 
    BMW { 
     public void specificMethod() { 
      System.out.println("meth1"); 
     } 
    }, 

    AUDI { 
     public void specificMethod() { 
      System.out.println("meth2"); 
     } 
    }; 

    public abstract void specificMethod(); 
} 

을 그럼 당신은 호출 할 수

for (Car car : list) { 
    car.getBrand().specificMethod(); 
} 
관련 문제