Skenario 1: kasus sederhana
Jika dijamin objek Anda adalah Integer
, ini adalah cara sederhana:
int x = (Integer)yourObject;
Skenario 2: objek numerik apa pun
Di Jawa Integer
, Long
, BigInteger
dll semua mengimplementasikan Number
antarmuka yang memiliki metode bernama intValue
. Jenis khusus lainnya dengan aspek numerik juga harus diterapkan Number
(misalnya Age implements Number
:). Jadi kamu bisa:
int x = ((Number)yourObject).intValue();
Skenario 3: parsing teks numerik
Ketika Anda menerima input pengguna dari baris perintah (atau bidang teks dll.) Anda mendapatkannya sebagai String
. Dalam hal ini Anda dapat menggunakan Integer.parseInt(String string)
:
String input = someBuffer.readLine();
int x = Integer.parseInt(input);
Jika Anda mendapatkan input Object
, Anda dapat menggunakan (String)input
, atau, jika dapat memiliki jenis tekstual lainnya, input.toString()
:
int x = Integer.parseInt(input.toString());
Skenario 4: hash identitas
Di Jawa tidak ada petunjuk. Namun Object
memiliki implementasi default seperti pointer untuk hashCode()
, yang tersedia secara langsung melalui System.identityHashCode(Object o)
. Jadi kamu bisa:
int x = System.identityHashCode(yourObject);
Perhatikan bahwa ini bukan nilai penunjuk nyata. Alamat memori objek dapat diubah oleh JVM sementara hash identitasnya disimpan. Juga, dua benda hidup dapat memiliki hash identitas yang sama.
Anda juga bisa menggunakan object.hashCode()
, tetapi bisa juga tipe spesifik.
Skenario 5: indeks unik
Dalam kasus yang sama Anda memerlukan indeks unik untuk setiap objek, seperti untuk menambahkan nilai ID secara otomatis dalam tabel database (dan tidak seperti hash identitas yang tidak unik). Contoh implementasi sederhana untuk ini:
class ObjectIndexer {
private int index = 0;
private Map<Object, Integer> map = new WeakHashMap<>();
public int indexFor(Object object) {
if (map.containsKey(object)) {
return map.get(object);
} else {
index++;
map.put(object, index);
return index;
}
}
}
Pemakaian:
ObjectIndexer indexer = new ObjectIndexer();
int x = indexer.indexFor(yourObject); // 1
int y = indexer.indexFor(new Object()); // 2
int z = indexer.indexFor(yourObject); // 1
Skenario 6: enum anggota
Dalam Java enum, anggota bukan bilangan bulat tetapi objek berfitur lengkap (tidak seperti C / C ++, misalnya). Mungkin tidak pernah ada kebutuhan untuk mengkonversi objek enum int
, namun Java secara otomatis mengaitkan nomor indeks untuk setiap anggota enum. Indeks ini dapat diakses melalui Enum.ordinal()
, misalnya:
enum Foo { BAR, BAZ, QUX }
// ...
Object baz = Foo.BAZ;
int index = ((Enum)baz).ordinal(); // 1
Object
bukanInteger
, saya tidak yakin apa yang Anda harapkan dari pemeran Anda.