2012-10-17 18 views
7

İşte benim sorunumun soyut bir örneğidir: Bir tür() türünde genel bir sınıf var (Car). Tüm nesneler sadece markaya göre farklılık göstermeli ve bu markaya dayalı olarak farklı şekilde ele alınmalıdır.Enum türüne göre belirli bir yöntemi çağırın.

Bu sınıfın tüm nesneleri bir Hizmet sınıfı listesinde toplanır. Servis, tüm liste üzerinde bir rutin çalışması yapmalıdır; bu, çoğunlukla aynıdır. Arada sadece bir işlev çağrısı farklı olmalıdır.

Bu türe bağlı olarak farklı yöntemleri aramak istiyorum: Şu anda enum türü için eşittir iddia ediyorum ve sonuca göre farklı yöntemler çağırın. Ama bu çirkin ve bu konuda daha iyi çözümler olup olmadığını merak ediyorum?

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: 'equals kullanmanız gerekmez Enumlar ile. car.getBrand() == Brand.BMW, sadece iyi çalışıyor. –

cevap

24

Sen enum yöntemini koymalıyız:

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

    public abstract void doSomething(); 
} 

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

güzel cevap +1. – Juvanis

+1

Dang hızlısın! –

+0

Cehennem nerde +5? – sErVerdevIL

4

şöyle, enum üzerinde soyut bir yöntem tanımlayan düşünün:

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

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

    public abstract void specificMethod(); 
} 

Sonra arayabilirsiniz:

for (Car car : list) { 
    car.getBrand().specificMethod(); 
} 
İlgili konular