Bagaimana cara memeriksa untuk memastikan variabel saya adalah int, array, double, dll ...?
Sunting: Misalnya, bagaimana saya bisa memeriksa bahwa variabel adalah array? Apakah ada fungsi untuk melakukan ini?
Bagaimana cara memeriksa untuk memastikan variabel saya adalah int, array, double, dll ...?
Sunting: Misalnya, bagaimana saya bisa memeriksa bahwa variabel adalah array? Apakah ada fungsi untuk melakukan ini?
Jawaban:
Java adalah bahasa yang diketik secara statis, jadi kompilator melakukan sebagian besar pemeriksaan ini untuk Anda. Setelah Anda mendeklarasikan variabel menjadi tipe tertentu, kompilator akan memastikan bahwa variabel tersebut hanya diberi nilai dari tipe itu (atau nilai yang merupakan sub-tipe dari tipe itu).
Contoh yang Anda berikan ( int, array, double) ini semua adalah primitif, dan tidak ada subtipe dari mereka. Jadi, jika Anda mendeklarasikan sebuah variabel sebagai int:
int x;
Anda bisa yakin itu hanya akan menyimpan intnilai.
Jika Anda mendeklarasikan sebuah variabel menjadi a List, bagaimanapun, mungkin saja variabel tersebut akan menampung sub-tipe dari List. Contoh ini meliputi ArrayList, LinkedList, dll
Jika Anda memang memiliki Listvariabel, dan Anda ingin tahu apakah itu sebuah ArrayList, Anda dapat melakukan hal berikut:
List y;
...
if (y instanceof ArrayList) {
...its and ArrayList...
}
Namun, jika Anda merasa perlu melakukan itu, Anda mungkin ingin memikirkan kembali pendekatan Anda. Dalam kebanyakan kasus, jika Anda mengikuti prinsip berorientasi objek, Anda tidak perlu melakukan ini. Ada, tentu saja, pengecualian untuk setiap aturan.
Sebenarnya cukup mudah untuk menggulung penguji Anda sendiri, dengan menyalahgunakan metode overload kemampuan Java. Padahal saya masih penasaran apakah ada metode resmi di sdk.
Contoh:
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");
}
}
kemudian:
Typetester t = new Typetester();
t.printType( yourVariable );
a.getClass().getName()- akan memberi Anda tipe data dari objek sebenarnya yang dirujuk a, tetapi bukan tipe data yang aawalnya dideklarasikan sebagai variabel atau kemudian ditransmisikan.
boolean b = a instanceof String- akan memberi Anda apakah objek sebenarnya yang dirujuk oleh aadalah turunan dari kelas tertentu atau tidak. Sekali lagi, tipe data di mana variabel aawalnya dideklarasikan sebagai atau kemudian dilemparkan ke tidak ada sangkut pautnya dengan hasil dari operator instance.
Saya mengambil informasi ini dari: Bagaimana Anda mengetahui tipe variabel di java?
Ini bisa terjadi. Saya mencoba untuk mengurai a Stringmenjadi int dan saya ingin tahu apakah saya Integer.parseInt(s.substring(a, b))menendang int atau sampah sebelum saya mencoba menyimpulkannya.
Omong-omong, ini dikenal sebagai Refleksi. Berikut beberapa informasi lebih lanjut tentang subjek: http://docs.oracle.com/javase/tutorial/reflect/
Anda dapat bekerja dengan Integer alih-alih int, Double, bukan double, dll. (Kelas seperti itu ada untuk semua tipe primitif). Kemudian Anda dapat menggunakan contoh operator, sepertiif(var instanceof Integer){...}
Gunakan saja:
.getClass().getSimpleName();
Contoh:
StringBuilder randSB = new StringBuilder("just a String");
System.out.println(randSB.getClass().getSimpleName());
Keluaran:
StringBuilder
randSBmemegang NULL.
Saya rasa memeriksa jenis variabel bisa dilakukan dengan cara ini.
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! ");
}
Dengan cara ini Anda tidak perlu memiliki beberapa metode kelebihan beban. Saya pikir itu adalah praktik yang baik untuk menggunakan koleksi di atas array karena manfaat tambahannya. Karena itu, saya tidak tahu cara memeriksa tipe array. Mungkin seseorang dapat meningkatkan solusi ini. Semoga ini membantu!
PS Ya, saya tahu bahwa ini juga tidak memeriksa primitif.
Bagian pertama dari pertanyaan Anda tidak ada artinya. Tidak ada keadaan di mana Anda tidak mengetahui jenis variabel primitif pada waktu kompilasi.
Kembali ke bagian kedua, satu-satunya keadaan yang belum Anda ketahui apakah variabel adalah array adalah jika itu adalah Objek. Dalam hal ini object.getClass().isArray()akan memberitahu Anda.
Saya melakukannya dengan menggunakan: if(x.getClass() == MyClass.class){...}
Saya tidak senang dengan jawaban-jawaban ini, dan jawaban yang benar tidak memiliki penjelasan dan penilaian negatif jadi saya mencari-cari, menemukan beberapa hal dan mengeditnya agar mudah dipahami. Bermainlah dengannya, tidak sesederhana yang diharapkan.
//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);
Berikut adalah metodenya:
public static void checkClass (Object obj) {
Class cls = obj.getClass();
System.out.println("The type of the object is: " + cls.getSimpleName());
}
Tak satu pun dari jawaban ini berfungsi jika variabel adalah tipe generik yang tidak diinisialisasi
Dan dari apa yang dapat saya temukan, itu hanya mungkin menggunakan solusi yang sangat jelek , atau dengan mengirimkan parameter yang diinisialisasi ke fungsi Anda, membuatnya di tempat, lihat di sini:
<T> T MyMethod(...){ if(T.class == MyClass.class){...}}
TIDAK valid karena Anda tidak dapat menarik tipe keluar dari Tparameter secara langsung, karena dihapus pada waktu runtime.
<T> void MyMethod(T out, ...){ if(out.getClass() == MyClass.class){...}}
Ini berfungsi karena pemanggil bertanggung jawab untuk membuat instance variabel outsebelum memanggil. Ini masih akan memunculkan pengecualian jika out adalah null saat dipanggil, tetapi dibandingkan dengan solusi tertaut, sejauh ini cara termudah untuk melakukan ini
Saya tahu ini adalah jenis aplikasi khusus, tetapi karena ini adalah hasil pertama di google untuk menemukan jenis variabel dengan java (dan mengingat itu Tadalah jenis variabel), saya merasa itu harus dimasukkan
Anda dapat memeriksanya dengan mudah menggunakan Java.lang.Class.getSimpleName()Metode Hanya jika variabel memiliki tipe non-primitif. Itu tidak bekerja dengan tipe primitif int, long dll.
referensi - Ini adalah tautan dokumen Oracle
Pada dasarnya, Misalnya:
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
}
}