Farklı enums
etiketlerini kullanıyorum boş bir arabirim var Units
Farklı birimlerde tuttuklarını biliyorum (örneğin, enum TemperatureUnits implements Units{}
depolarım var) vb Fahrenheit, Celsius, o zaman ben metre, fit tutan bir DistanceUnits
, var vs.Belirli bir arabirimi bir anahtar/vakada uygulayan farklı enumlarla işleme Enum değerleri
enum
değer bir yönteme geçirilen dayalı bir anahtar/durumunda farklı şeyler yapmak istiyorum
. Ben bunu istiyorum Units
'u uygulayan herhangi bir enum
'dan bir değeri kabul edin. Sorun şu ki, enums
aslında farklı sınıflar olduğundan, anahtar/ca'daki değerin nitelikli adını kullanmalıyım se. Benim kod şöyle görünür:
public static void foo(Units units){ //units has to be an enum that implements Units
switch (units){
case TemperatureUnits.FAHRENHEIT: //I can't say just FAHRENHEIT, because Units itself doesn't
//have a FAHRENHEIT value, but it won't let me say TemperatureUnits.FAHRENHEIT because it won't let use
// qualified enum values as cases.
//Do stuff
break;
case DistanceUnits.METERS:
//Do other stuff
break;
//...etc
farklı enums
değerleri kullanabileceğiniz bir switch/case deyimi olurdu nasıl?
Düzenleme: Benim Units
arayüzü adildir:
public interface Units{
String getLabel();
}
Kullanım polimorfizm, bu kadar kısa sürede yeni enum sabiti veya enum sınıfı tanımlanmıştır olarak yanlış olacaktı. Birimler'e bir yöntem ekleyin, tüm numaralarda geçersiz kılın ve anahtar bloğunu yürütmek yerine onu çağır. foo (birimler) yerine units.foo() kullanın. Arayüz "Unit", BTW olarak adlandırılmalıdır: CELSIUS_DEGREE bir Birim, Bir Birim değil. –
Bu, * etiketli bir sınıfı tanımladığınız bir duruma benziyor *, yani sınıfın davranışı, önemli ölçüde bazı etiketlerin değerine bağlı olarak değişir (Sıcaklık, Mesafe, vb.). Bu durumda, en iyi, en şıkınız ve en sağlam çözüm (JB'nin bahsettiği gibi) bir sınıf hiyerarşisi geliştirmektir (örn. TemperatureUnits, Birimlerin alt sınıfıdır). Aksi halde, kodunuz çok büyük bir sınıf (veya enum) ile yapmaya çalışırsanız çok çirkin görünebilir. İstediğiniz özel davranış alt sınıflar tarafından kolayca tanımlanabilir. – scottb
Niçin sıcaklık, mesafe ve benzeri gibi tamamen ilgisiz şeyler için bir temel enum'a sahip olmak istersiniz? – Robert