Değişkenimin bir int, dizi, çift vb. Olduğundan emin olmak için nasıl kontrol edebilirim?
Düzenleme: Örneğin, bir değişkenin bir dizi olup olmadığını nasıl kontrol edebilirim? Bunu yapacak bir işlev var mı?
Değişkenimin bir int, dizi, çift vb. Olduğundan emin olmak için nasıl kontrol edebilirim?
Düzenleme: Örneğin, bir değişkenin bir dizi olup olmadığını nasıl kontrol edebilirim? Bunu yapacak bir işlev var mı?
Yanıtlar:
Java statik olarak yazılmış bir dildir, bu nedenle derleyici bu kontrolün çoğunu sizin için yapar. Bir değişkeni belirli bir tür olarak ilan ettiğinizde, derleyici ona yalnızca o türden değerlerin (veya bu türün alt türleri olan değerlerin) atanmasını sağlayacaktır.
Verdiğiniz örnekler ( intdizi, double) bunların tümü ilkeldir ve bunların alt türleri yoktur. Bu nedenle, bir değişkeni bir int:
int x;
Sadece intdeğerleri tutacağından emin olabilirsiniz .
Bir değişkeni a olarak Listtanımladıysanız, değişkenin alt türlerini tutması mümkündür List. Bunların örnekleri arasında ArrayList, LinkedListvs.
Bir Listdeğişkeniniz varsa ve bunun bir değişken olup olmadığını ArrayListbilmeniz gerekiyorsa, aşağıdakileri yapabilirsiniz:
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
Bununla birlikte, kendinizi bunu yapmanız gerektiğini düşünürken bulursanız, yaklaşımınızı yeniden düşünmek isteyebilirsiniz. Çoğu durumda, nesneye yönelik ilkeleri izlerseniz, bunu yapmanıza gerek kalmaz. Elbette her kuralın istisnaları vardır.
Java'nın aşırı yöntem yükleme yeteneğini kötüye kullanarak kendi test cihazınızı kullanmak aslında oldukça kolaydır. SDK'da resmi bir yöntem olup olmadığını merak etmeme rağmen.
Misal:
class Typetester {
void printType(byte x) {
System.out.println(x + " is an byte");
}
void printType(int x) {
System.out.println(x + " is an int");
}
void printType(float x) {
System.out.println(x + " is an float");
}
void printType(double x) {
System.out.println(x + " is an double");
}
void printType(char x) {
System.out.println(x + " is an char");
}
}
sonra:
Typetester t = new Typetester();
t.printType( yourVariable );
a.getClass().getName()- size tarafından atıfta bulunulan gerçek nesnenin veri türünü verir a, ancak değişkenin abaşlangıçta bildirildiği veya daha sonra dönüştürüldüğü veri türünü vermez .
boolean b = a instanceof String- atıfta bulunulan gerçek nesnenin abelirli bir sınıfın bir örneği olup olmadığını size verecektir . Yine, değişkenin abaşlangıçta olarak bildirildiği veya daha sonra dönüştürüldüğü veri türünün, operatörün örneğinin sonucuyla hiçbir ilgisi yoktur.
Bu bilgiyi şu kaynaktan aldım: Java'da bir değişken türünü nasıl biliyorsunuz?
Bu olabilir. A'yı Stringbir int olarak ayrıştırmaya çalışıyorum ve Integer.parseInt(s.substring(a, b))özetlemeye çalışmadan önce benim int mi yoksa çöp mü attığını bilmek istiyorum .
Bu arada, buna Yansıma denir. Konuyla ilgili daha fazla bilgi: http://docs.oracle.com/javase/tutorial/reflect/
İnt yerine Tamsayı, double yerine Double vb. İle çalışabilirsiniz (bu tür sınıflar tüm ilkel türler için mevcuttur). O zaman operatör instanceof'unu kullanabilirsiniz.if(var instanceof Integer){...}
Sadece kullan:
.getClass().getSimpleName();
Misal:
StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());
Çıktı:
StringBuilder
randSBNULL tutarsa bunun işe yaramayacağını belirtmek isterim .
Bence değişken türünü kontrol etmek bu şekilde yapılabilir.
public <T extends Object> void checkType(T object) {
if (object instanceof Integer)
System.out.println("Integer ");
else if(object instanceof Double)
System.out.println("Double ");
else if(object instanceof Float)
System.out.println("Float : ");
else if(object instanceof List)
System.out.println("List! ");
else if(object instanceof Set)
System.out.println("Set! ");
}
Bu şekilde, birden fazla aşırı yüklenmiş yönteme sahip olmanız gerekmez. Ek faydalar nedeniyle koleksiyonları diziler üzerinde kullanmanın iyi bir uygulama olduğunu düşünüyorum. Bunu söyledikten sonra, bir dizi türünü nasıl kontrol edeceğimi bilmiyorum. Belki birisi bu çözümü geliştirebilir. Bu yardımcı olur umarım!
Not: Evet, bunun ilkelleri de kontrol etmediğini biliyorum.
Sorunuzun ilk kısmı anlamsız. Derleme zamanında ilkel bir değişkenin türünü bilmediğiniz bir durum yoktur.
İkinci kısımda, bir değişkenin bir dizi olup olmadığını bilmediğiniz tek durum, bunun bir Nesne olup olmadığıdır. Bu durumda object.getClass().isArray()size söyleyeceğim.
Bunu kullanarak yaptım: if(x.getClass() == MyClass.class){...}
Bu cevapların hiçbirinden memnun değildim ve doğru olanın açıklaması ve olumsuz oyları olmadığı için etrafı araştırdım, bazı şeyler buldum ve anlaşılması kolay olacak şekilde düzenledim. Onunla bir oyun oynayın, birinin umduğu kadar basit değil.
//move your variable into an Object type
Object obj=whatYouAreChecking;
System.out.println(obj);
// moving the class type into a Class variable
Class cls=obj.getClass();
System.out.println(cls);
// convert that Class Variable to a neat String
String answer = cls.getSimpleName();
System.out.println(answer);
İşte bir yöntem:
public static void checkClass (Object obj) {
Class cls = obj.getClass();
System.out.println("The type of the object is: " + cls.getSimpleName());
}
Değişken başlatılmamış genel bir türse bu yanıtların hiçbiri işe yaramaz
Ve bulabildiğim kadarıyla, bu yalnızca son derece çirkin bir geçici çözüm kullanarak veya işlevinize ilklendirilmiş bir parametre göndererek ve onu yerinde yaparak mümkündür, buraya bakın:
<T> T MyMethod(...){ if(T.class == MyClass.class){...}}
Çalışma Tzamanında silindiğinden , türü doğrudan parametreden çıkaramayacağınız için geçerli DEĞİLDİR .
<T> void MyMethod(T out, ...){ if(out.getClass() == MyClass.class){...}}
Bu işe yarar çünkü çağıran, outaramadan önce değişkeni somutlaştırmaktan sorumludur . Bu, çağrıldığında boşsa yine de bir istisna atacaktır, ancak bağlantılı çözüme kıyasla, bunu yapmanın en kolay yolu budur.
Bunun bir tür özel uygulama olduğunu biliyorum, ancak bu, google'da java ile bir değişkenin türünü bulmak için ilk sonuç olduğu için (ve bu Tbir tür değişken olduğu göz önüne alındığında ), dahil edilmesi gerektiğini düşünüyorum.
Java.lang.Class.getSimpleName()Değişkenin ilkel olmayan türü varsa, Yalnızca Yöntem kullanarak kolayca kontrol edebilirsiniz . İlkel türler int, long vb. İle çalışmaz.
referans - İşte Oracle dokümanları bağlantısı
Temel olarak, Örneğin:
public class Kerem
{
public static void main(String[] args)
{
short x = 10;
short y = 3;
Object o = y;
System.out.println(o.getClass()); // java.lang.Short
}
}