Ada tipe referensi Java Void
- huruf besar V-- . Satu-satunya situasi yang pernah saya lihat adalah menggunakan parameterize s Callable
final Callable<Void> callable = new Callable<Void>() {
public Void call() {
foobar();
return null;
}
};
Apakah ada kegunaan lain untuk Void
tipe referensi Java ? Bisakah itu ditugaskan selain null
? Jika ya, apakah Anda punya contoh?
Jawaban:
Void
telah menjadi konvensi untuk argumen umum yang tidak Anda minati. Tidak ada alasan mengapa Anda harus menggunakan tipe non-instantiable lainnya, sepertiSystem
.Ini juga sering digunakan sebagai
Map
nilai contoh (meskipunCollections.newSetFromMap
digunakanBoolean
sebagai peta tidak harus menerimanull
nilai) danjava.security.PrivilegedAction
.Saya menulis sebuah entri weblog pada
Void
beberapa tahun lalu.sumber
java.lang.Void
. / Josh Bloch mempopulerkan konvensi itu, meskipun begitu kau melihatnya, itu adalah pilihan yang jelas.Anda dapat membuat instance Void menggunakan refleksi, tetapi mereka tidak berguna untuk apa pun. Void adalah cara untuk menunjukkan metode umum tidak mengembalikan apa pun.
mencetak sesuatu seperti
sumber
System.exit(0)
). Saya cenderung menulis kelas utilitas dengan konstruktor sebagaiprivate Void() { throw new Error(); }
. Beberapa mungkin lebih suka enum tanpa nilai.Future<Void>
bekerja seperti pesona. :)sumber
Future<?>
, karena masa depan akan sering memiliki nilai yang sah (dariVoid
tipe tidak ) tetapi digunakan dalam konteks yang tidak peduli dengan nilai.CompletableFuture<Void>
bekerja seperti pesona juga.Mengingat bahwa tidak ada konstruktor publik , saya akan mengatakan itu tidak dapat ditugaskan selain
null
. Saya hanya menggunakannya sebagai pengganti untuk "Saya tidak perlu menggunakan parameter umum ini," seperti contoh Anda.Itu juga dapat digunakan dalam refleksi, dari apa yang dikatakan Javadoc -nya :
sumber
Semua kelas wrapper primitif (
Integer
,Byte
,Boolean
,Double
, dll) berisi referensi ke kelas primitif yang sesuai dalam staticTYPE
bidang, misalnya:Void
awalnya dibuat sebagai tempat untuk meletakkan referensi kevoid
tipe:Namun, Anda tidak benar-benar mendapatkan apa pun dengan menggunakan
Void.TYPE
. Ketika Anda menggunakannyavoid.class
, jauh lebih jelas bahwa Anda melakukan sesuatu denganvoid
tipe itu.Sebagai tambahan, terakhir kali saya mencobanya, BeanShell tidak mengenalinya
void.class
, jadi Anda harus menggunakannya diVoid.TYPE
sana.sumber
Saat Anda menggunakan pola pengunjung , bisa lebih bersih menggunakan Void daripada Object ketika Anda ingin memastikan bahwa nilai baliknya akan nol
Contoh
Ketika Anda akan menerapkan pengunjung Anda, Anda dapat secara eksplisit menetapkan OUT menjadi Void sehingga Anda tahu pengunjung Anda akan selalu kembali nol, daripada menggunakan Object
sumber
Sebelum generik, itu dibuat untuk API refleksi, untuk menahan TYPE yang dikembalikan oleh Method.getReturnType () untuk metode batal, sesuai dengan kelas tipe primitif lainnya.
EDIT: Dari JavaDoc of Void: "Kelas Void adalah kelas placeholder yang tidak dapat dibantah untuk menyimpan referensi ke objek Kelas yang mewakili kata kunci Java void". Sebelum ke Generics, saya sadar tidak ada gunanya selain refleksi.
sumber
Void
. Silakan lihat stackoverflow.com/questions/34248693/...Karena Anda tidak dapat membuat instance Void, Anda dapat menggunakan objek Null Apache commons , jadi
di baris pertama, Anda memiliki objek, jadi
aNullObject != null
tahan, sedangkan di baris kedua tidak ada referensi, jadinoObjectHere == null
tahanUntuk menjawab pertanyaan asli poster, penggunaannya adalah untuk membedakan antara "tidak ada" dan "tidak ada", yang merupakan hal yang sama sekali berbeda.
PS: Katakan tidak pada pola objek Null
sumber
Void dibuat untuk membungkus tipe void primitifnya. Setiap tipe primitif memiliki tipe referensi yang sesuai. Void digunakan untuk instantiate kelas generik atau penggunaan metode generik, Argumen penyihir generik yang Anda tidak tertarik. Dan di sini adalah contoh ...
di sini, seperti yang Anda lihat, saya tidak ingin apa pun dari server yang saya minta untuk membuat registrasi baru, tetapi
public interface AsyncCallback<T> { .... }
merupakan antarmuka generik jadi saya memberikan Void karena generik tidak menerima tipe primitifsumber
Ini juga biasa digunakan pada callback penyelesaian Async-IO ketika Anda tidak membutuhkan
Attachment
objek. Dalam hal ini Anda tentukan null untuk operasi dan implementasi IOCompletionHandler<Integer,Void>
.sumber
Ini mungkin kasus yang jarang tetapi sekali, saya digunakan
Void
di kelas aspek.Ini adalah aspek yang berjalan setelah metode yang memiliki
@Log
anotasi, dan mencatat metode kembali dan beberapa info jika jenis metode kembali tidak batal.sumber