Perbedaannya di sini adalah bahwa di bagian pertama, kita menetapkan bahwa pemanggil harus meneruskan instance Object (kelas apa pun), dan itu akan mendapatkan kembali Object lain (kelas apa pun, tidak harus dari tipe yang sama).
Yang kedua, tipe yang dikembalikan akan menjadi tipe yang sama seperti yang diberikan saat kelas didefinisikan.
Example ex = new Example<Integer>();
Di sini kita menentukan tipe T apa yang memungkinkan kita untuk memberlakukan lebih banyak batasan pada kelas atau metode. Misalnya kita dapat membuat LinkedList<Integer>
atau LinkedList<Example>
dan kita tahu bahwa ketika kita memanggil salah satu metode ini, kita akan mendapatkan kembali contoh Integer atau Contoh.
Tujuan utamanya di sini adalah bahwa kode pemanggil dapat menentukan tipe objek apa yang akan dioperasikan kelas, alih-alih mengandalkan tipe-casting untuk memberlakukannya.
Lihat Java Generics * dari Oracle.
* Tautan yang Diperbarui.
Anda tidak perlu melakukan transmisi kelas tambahan. Dalam kasus pertama, Anda akan selalu mendapatkan objek dari kelas java.lang.Object yang perlu Anda transmisikan ke kelas Anda. Dalam kasus kedua, T akan diganti dengan kelas yang ditentukan dalam tanda tangan generik dan tidak diperlukan pengecoran kelas.
sumber
Saat runtime, tidak ada. Tetapi pada waktu kompilasi yang kedua akan melakukan pemeriksaan tipe untuk memastikan jenis parameter dan jenis nilai yang dikembalikan cocok (atau merupakan subtipe dari) apa pun tipe T (contoh pertama juga melakukan pemeriksaan jenis tetapi setiap objek adalah a subtipe Objek sehingga setiap tipe akan diterima).
sumber
T adalah tipe generik. Artinya itu dapat diganti dengan objek yang memenuhi syarat pada saat runtime. Anda dapat menggunakan metode seperti berikut:
String response = doSomething("hello world");
ATAU
MyObject response = doSomething(new MyObject());
ATAU
Integer response = doSomething(31);
Seperti yang Anda lihat, ada polimorfisme di sini.
Tetapi jika itu dideklarasikan untuk mengembalikan Object, Anda tidak dapat melakukan ini kecuali Anda mengetik cast.
sumber
<T>
tidak ada autoboxing?dalam kasus pertama ini mengambil parameter dari semua tipe egstring dan mengembalikan tipe foo. Dalam kasus kedua, dibutuhkan parameter berjenis foo dan mengembalikan objek berjenis foo.
sumber
Ada beberapa alasan mengapa Anda dapat mempertimbangkan Generik daripada tipe Objek di Java:
sumber