2014-12-20 22 views
8

ancak bana bir hata verir Sabit ekspres gerekli hatayı verir ifade değişkeni ifadelerini, derleme zamanı sabit ifadeleri olan başlatıcılara dönüştürmeyi öneren yanıtlar görüldü. Ancak, bu durumda bu mümkün değildir.Java switch deyimi bir anahtar ifadesi için class.getSimpleName() kullanmaya çalışıyorum

Sınıf adlarını kodlamak zorunda kalmadan class.getSimpleName() yöntemini kullanarak geçiş yapmanın bir yolu var mı? Bir vaka ifadesi olarak kullanılamaz böylece

Örnek kod

public class ClassA { 
    public static final String TAG = ClassA.class.getSimpleName(); 
    ... 
} 

public class ClassB { 
    public static final String TAG = ClassB.class.getSimpleName(); 
    ... 
} 

public class SomeOtherClass { 
    switch (express) { 
    case ClassA.TAG: // Error here 
     ... 
     break; 
    case ClassB.TAG: // and here 
     ... 
     break; 
    default: 
     ... 
     break; 
} 
+0

@Eran Bu, geçiş yaptığınız değerle ilgili bir sorun değildir, ancak durum kendiliğinden gelir. –

+0

@Eran Evet, java 7 kullanıyorum. – fahmy

cevap

9

Is there a way to make a switch using class.getSimpleName() without having to hardcode the class names?

sayılı Temelde, Class.getSimpleName() çağıran bir derleme zamanı sabiti ifadesi olarak sayılmaz. C# 6'da olduğu gibi bir nameof(...) operatörü olsaydı güzel olurdu, ama bu olmadan, isimleri kodlamadan bir anahtar/kasa kullanabileceğinizi düşünmüyorum.

İlgili konular