Apa cara yang benar untuk mengembalikan sebuah Void
tipe, jika itu bukan primitif? Misalnya. Saat ini saya menggunakan null seperti di bawah ini.
interface B<E>{ E method(); }
class A implements B<Void>{
public Void method(){
// do something
return null;
}
}
java
generics
return-value
Robert
sumber
sumber
Jawaban:
Jadi, salah satu dari berikut ini sudah cukup:
Object
dan kembalinew Object()
ataunull
Void
dan kembalinull
NullObject
milik AndaAnda tidak dapat membuat metode ini
void
, dan yang lainnya mengembalikan sesuatu . Karena sesuatu itu diabaikan, Anda dapat mengembalikan apapun.sumber
return (Void)null;
Java 8 telah memperkenalkan kelas baru
Optional<T>
, yang dapat digunakan dalam kasus seperti itu. Untuk menggunakannya, Anda akan sedikit mengubah kode sebagai berikut:Ini memungkinkan Anda untuk memastikan bahwa Anda selalu mendapatkan nilai pengembalian bukan nol dari metode Anda, bahkan ketika tidak ada yang dikembalikan. Itu sangat kuat ketika digunakan bersama dengan alat yang mendeteksi kapan
null
bisa atau tidak bisa dikembalikan, misalnya Eclipse@NonNull
dan@Nullable
anotasi.sumber
Optional<Void>
tidak diperlukan untuk alasan yang sama dengan yang Anda berikan, Anda selalu mendapatkanOptional<Void>
yang kosong sehingga semua metode lain tidak ada gunanya. Ini kebalikan dari mengapa nilai opsional harus digunakan. Anda menggunakannya karena mungkin atau mungkin tidak memiliki nilai. Juga kompilator tidak bisamethod()
menerapkannya dengan benar. Ini akan gagal di runtime:return Optional.of(null)
.Jika Anda tidak membutuhkan apa pun sebagai tipe Anda, Anda dapat menggunakan void. Ini dapat digunakan untuk mengimplementasikan fungsi, atau tindakan. Anda kemudian dapat melakukan sesuatu seperti ini:
Atau Anda bisa menghilangkan kelas abstrak, dan melakukan pengembalian null dalam setiap tindakan yang tidak memerlukan nilai pengembalian sendiri.
Anda kemudian dapat menggunakan tindakan seperti ini:
Diberikan metode
Anda bisa menyebutnya seperti
atau, untuk tindakan void (perhatikan bahwa Anda tidak menetapkan hasilnya untuk apa pun)
sumber
Hanya demi itu, tentu saja ada kemungkinan untuk membuat
Void
instance menggunakan refleksi:Anda mungkin tidak akan melakukannya dalam produksi.
sumber
Tidak ada tipe generik yang akan memberi tahu kompiler bahwa sebuah metode tidak mengembalikan apa-apa.
Saya percaya konvensi adalah menggunakan Object saat mewarisi sebagai parameter tipe
ATAU
Sebarkan parameter type ke atas dan kemudian biarkan pengguna kelas Anda membuat instance menggunakan Object dan menugaskan objek ke variabel yang diketik menggunakan jenis-wildcard
?
:sumber
A<?>
tidak akan dapat menggunakan nilai yang dikembalikan darimethod()
.