Diyelim ki dersim var:
public class R {
public static final int _1st = 0x334455;
}
"_1st" in değerini yansıtma yoluyla nasıl elde edebilirim ?
Diyelim ki dersim var:
public class R {
public static final int _1st = 0x334455;
}
"_1st" in değerini yansıtma yoluyla nasıl elde edebilirim ?
BR
sınıfta.
Yanıtlar:
Önce sınıfın alan özelliğini alın, ardından değeri alabilirsiniz. Türü biliyorsanız, get yöntemlerinden birini null ile kullanabilirsiniz (yalnızca statik alanlar için, aslında bir statik alanla get yöntemine iletilen bağımsız değişken tamamen yok sayılır). Aksi takdirde getType'ı kullanabilir ve aşağıdaki gibi uygun bir anahtar yazabilirsiniz:
Field f = R.class.getField("_1st");
Class<?> t = f.getType();
if(t == int.class){
System.out.println(f.getInt(null));
}else if(t == double.class){
System.out.println(f.getDouble(null));
}...
getInt()
, tartışmada geçirilenleri görmezden gelen asla bahsetmez nasıl olur ? Sınıfın örneğinin oradan geçmesini sağlamaya çalışmak için saatler harcadı.
R.class.getField("_1st").get(null);
İstisna işleme, okuyucu için bir alıştırma olarak bırakılmıştır.
Temelde, alanı herhangi bir diğer gibi yansıma yoluyla elde edersiniz, ancak get yöntemini çağırdığınızda, harekete geçecek bir örnek olmadığı için boş bir geçiş yaparsınız.
Bu, nihai olmalarına bakılmaksızın tüm statik alanlar için çalışır. Alan herkese açık değilse, setAccessible(true)
önce onu aramanız gerekir ve elbette SecurityManager'ın tüm bunlara izin vermesi gerekir.
Ben de aynı rotayı takip ediyordum (oluşturulan R sınıfına bakıyordum) ve sonra bu korkunç hissi yaşadım, muhtemelen Kaynaklar sınıfında bir işlevdi. Haklıydım
Bu bulundu: Resources :: getIdentifier
İnsanlara biraz zaman kazandıracağını düşündüm. Dokümanlarda cesareti kırıldığını söylemelerine rağmen, bu çok şaşırtıcı değil.
R._1st
çalışamaz mıydı? Android geliştirmeden bahsediyorsanız, benceR
sınıf her zaman orada ...