Saya mencoba mengembalikan 2 nilai dari metode Java tapi saya mendapatkan kesalahan ini. Ini kode saya:
// Method code
public static int something(){
int number1 = 1;
int number2 = 2;
return number1, number2;
}
// Main method code
public static void main(String[] args) {
something();
System.out.println(number1 + number2);
}
Kesalahan:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - missing return statement
at assignment.Main.something(Main.java:86)
at assignment.Main.main(Main.java:53)
Hasil Jawa: 1
java
function
return-value
javaLearner.java
sumber
sumber
Jawaban:
Alih-alih mengembalikan array yang berisi dua nilai atau menggunakan
Pair
kelas generik , pertimbangkan membuat kelas yang mewakili hasil yang ingin Anda kembalikan, dan kembalikan instance kelas itu. Beri kelas nama yang bermakna. Manfaat dari pendekatan ini dibandingkan menggunakan array adalah keamanan tipe dan itu akan membuat program Anda lebih mudah dimengerti.Catatan: Kelas generik
Pair
, seperti yang diusulkan dalam beberapa jawaban lain di sini, juga memberi Anda keamanan mengetik, tetapi tidak memberikan hasil yang diwakilinya.Contoh (yang tidak menggunakan nama yang benar-benar bermakna):
sumber
Java tidak mendukung pengembalian multi-nilai. Kembalikan array nilai.
sumber
Anda bisa menerapkan generik
Pair
jika Anda yakin bahwa Anda hanya perlu mengembalikan dua nilai:dan kemudian minta kembali metode itu
Pair
:sumber
Anda hanya dapat mengembalikan satu nilai di Java, jadi cara yang paling rapi adalah seperti ini:
Ini versi terbaru dari kode Anda:
sumber
Inilah solusi yang sangat sederhana dan singkat dengan SimpleEntry:
Hanya menggunakan Java built-in functions dan ia datang dengan manfaat jenis keselamatan.
sumber
Anda harus menggunakan koleksi untuk mengembalikan lebih dari satu nilai pengembalian
dalam kasus Anda, Anda menulis kode Anda sebagai
sumber
sumber
Gunakan objek jenis Pair / Tuple, Anda bahkan tidak perlu membuatnya jika Anda bergantung pada Apache commons-lang. Cukup gunakan kelas Pair .
sumber
Saya ingin tahu mengapa tidak ada yang datang dengan solusi panggilan balik yang lebih elegan. Jadi, alih-alih menggunakan tipe pengembalian Anda menggunakan handler yang diteruskan ke metode sebagai argumen. Contoh di bawah ini memiliki dua pendekatan yang berbeda. Saya tahu yang mana dari keduanya yang lebih anggun bagi saya. :-)
sumber
Anda tidak perlu membuat kelas Anda sendiri untuk mengembalikan dua nilai yang berbeda. Cukup gunakan HashMap seperti ini:
Anda bahkan mendapatkan manfaat dari keamanan tipe.
sumber
Menurut pendapat saya yang terbaik adalah membuat kelas baru yang konstruktor adalah fungsi yang Anda butuhkan, misalnya:
Kemudian cukup gunakan konstruktor karena Anda akan menggunakan fungsi:
dan Anda dapat menggunakan pR.sth1, pR.sth2 sebagai "2 hasil dari fungsi"
sumber
Anda juga dapat mengirim objek yang bisa berubah sebagai parameter, jika Anda menggunakan metode untuk memodifikasinya, mereka akan dimodifikasi ketika Anda kembali dari fungsi. Itu tidak akan bekerja pada hal-hal seperti Float, karena tidak dapat diubah.
Hasilnya adalah: Rutger
sumber
Kembalikan Array Objek
sumber
Pertama, akan lebih baik jika Java memiliki tuple untuk mengembalikan beberapa nilai.
Kedua, kode sesederhana mungkin
Pair
kelas , atau gunakan array.Tapi, jika Anda lakukan perlu untuk kembali sepasang, mempertimbangkan apa konsep yang diwakilinya (dimulai dengan nama field, maka nama kelas) - dan apakah itu memainkan peran yang lebih besar daripada yang Anda pikir, dan jika itu akan membantu desain Anda secara keseluruhan memiliki abstraksi eksplisit untuk itu. Mungkin itu
code hint
...Tolong Catatan: Saya tidak dogmatis mengatakan itu akan membantu, tetapi hanya untuk melihat, untuk melihat apakah itu ... atau jika tidak.
sumber
dan ini adalah bagaimana Anda melakukannya dalam JS:
return { objA, valueB }
. Saya tahu ini offtopic, tapi saya tidak bisa meninggalkan komentar ini setelah melihat bagaimana seluruh kelas baru harus diimplementasikan di Jawa. JavaScript - berhenti menyia-nyiakan hidup Anda dan mulai Scripting!sumber