Menurut sifat bahasa Jawa, saya kira orang tidak benar-benar memerlukan Pair
, antarmuka biasanya apa yang mereka butuhkan. Berikut ini sebuah contoh:
interface Pair<L, R> {
public L getL();
public R getR();
}
Jadi, ketika orang ingin mengembalikan dua nilai, mereka dapat melakukan hal berikut:
... //Calcuate the return value
final Integer v1 = result1;
final String v2 = result2;
return new Pair<Integer, String>(){
Integer getL(){ return v1; }
String getR(){ return v2; }
}
Ini adalah solusi yang cukup ringan, dan menjawab pertanyaan "Apa itu semantik dari Pair<L,R>
?". Jawabannya adalah, ini adalah antarmuka yang dibangun dengan dua (mungkin berbeda) jenis, dan memiliki metode untuk mengembalikan masing-masing. Terserah Anda untuk menambahkan semantik lebih lanjut. Misalnya, jika Anda menggunakan Posisi dan BENAR-BENAR ingin menunjukkannya dalam kode Anda, Anda dapat menentukan PositionX
dan PositionY
yang berisi Integer
, untuk membuat a Pair<PositionX,PositionY>
. Jika JSR 308 tersedia, Anda juga dapat menggunakannya Pair<@PositionX Integer, @PositionY Ingeger>
untuk menyederhanakannya.
EDIT: Satu hal yang saya harus tunjukkan di sini adalah bahwa definisi di atas secara eksplisit berkaitan dengan nama parameter type dan nama metode. Ini adalah jawaban bagi mereka yang berpendapat bahwa Pair
kurangnya informasi semantik. Sebenarnya, metode ini getL
berarti "beri saya elemen yang sesuai dengan tipe tipe parameter L", yang berarti sesuatu.
EDIT: Ini adalah kelas utilitas sederhana yang dapat membuat hidup lebih mudah:
class Pairs {
static <L,R> Pair<L,R> makePair(final L l, final R r){
return new Pair<L,R>(){
public L getL() { return l; }
public R getR() { return r; }
};
}
}
pemakaian:
return Pairs.makePair(new Integer(100), "123");
AbstractMap.SimpleEntry
berbelit - belit?