Rumah  >  Artikel  >  Java  >  Inferens Jenis Java

Inferens Jenis Java

WBOY
WBOYasal
2024-08-30 15:17:51730semak imbas

Inferens jenis dalam java ialah proses pengkompil yang secara automatik menyimpulkan parameter jenis data yang tidak ditentukan daripada maklumat kontekstual. Pertimbangkan contoh di mana kita ingin mencipta objek jenis kelas generik. Jadi untuk mencipta objek ini kita perlu memanggil binaan kelas generik dengan jenis parameter yang ditentukan, seperti String, Float, Integer dll, yang meningkatkan panjang kod. Untuk mengurangkan pengekodan ini java menyediakan fleksibiliti untuk mempelajari parameter jenis kosong selagi pengkompil menilai atau meneka jenis parameter dari konteks. Selain java ini juga menyediakan kad bebas yang membolehkan pengguna mencapai warisan dalam parameter jenis. Java 8 menyediakan versi inferens jenis yang lebih baik. Dalam kes jenis, inferens tidak digunakan maka pengkompil menghasilkan amaran penukaran yang tidak disemak.

Mulakan Kursus Pembangunan Perisian Percuma Anda

Pembangunan web, bahasa pengaturcaraan, ujian perisian & lain-lain

Sintaks

Sintaks adalah seperti berikut:

Generic_class < type_parameter > obj = new Generic_class<> ( );
Where -
Generic_class – Generic_class  is an  user create generic class.
<type_parameter> - type_parameter is a type parameter, which represented by agular brakets(<>), that can have one or more type of parameter separated by commas.
Obj – obj is the object of the generic class.
< > − < > (diamond) represents the type inference.

Contoh untuk Melaksanakan Inferens Jenis Java

Seterusnya, kami menulis kod java untuk memahami perkara ini dengan lebih jelas dengan contoh berikut di mana kami mencipta kelas generik untuk menerima pasangan nilai dengan menggunakan pembina kelas generik dan mencipta objek kelas generik untuk pasangan data yang berbeza jenis dan kemudian gunakan inferens jenis untuk parameter jenis, seperti di bawah –

Contoh #1

Kod:

package p1;
class Pair <x, y>
{
private x first;
private y second;
public Pair(x a, y b)
{
first=a;
second=b;
}
public x getFirst() {
return first;
}
public y getSecond() {
return second;
}
}
public class Demo
{
public static void main( String[] arg)
{
// unchecked conversion warning
Pair <Integer, String> ob1 = new Pair<Integer, String>(25, "Test1");
System.out.println("Integer value is : "+ob1.getFirst());
System.out.println("String valueis : "+ob1.getSecond());
System.out.println( );
// unchecked conversion warning
Pair <String, Integer> ob2 = new Pair<String, Integer>("Test2", 30);
System.out.println("String valueis : "+ob2.getFirst());
System.out.println("Integer is : "+ob2.getSecond());
System.out.println( );
// type inference, < > left it blank, compiler will infer type
Pair <String, Integer> ob3 = new Pair<String, Integer>("Test3", 30);
System.out.println("Integer valueis : "+ob3.getFirst());
System.out.println("Integer value is : "+ob3.getSecond());
System.out.println( );
// type inference, < > left it blank, compiler will infer type
Pair <Integer, Integer> ob4 = new Pair< >(35, 40);
System.out.println("Integer value is : "+ob4.getFirst());
System.out.println("Integer value is : "+ob4.getSecond());
System.out.println( );
}
}

Output:

Inferens Jenis Java

Penjelasan: Seperti dalam kod di atas, Pair kelas generik boleh dua jenis data berbeza dalam kelas sebagai x dan y. Di sini, dua objek pertama mencipta dengan menyebut integer dan / atau String jenis secara eksplisit di kedua-dua belah, yang merupakan versi Java yang lebih awal. Dan dalam dua objek terakhir yang mencipta contoh, jenis disebut di satu sisi (kita boleh dibiarkan <> sebelah kedua sebagai kosong), yang diperkenalkan di Java 7. Dan kemudian memperkenalkan untuk memanggil kaedah tertentu tanpa menyebut jenis secara jelas daripada argumen dalam java 8, yang akan kita lihat dalam contoh seterusnya.

Contoh #2

Seterusnya, kami menulis kod java untuk memahami inferens jenis baharu di mana kami mencipta kelas generik untuk menerima jenis mesej yang berbeza dengan menggunakan kaedah penetap kelas generik dan mencipta objek kelas generik untuk mesej yang berbeza jenis data yang berbeza dan kemudian gunakan inferens jenis untuk parameter jenis, seperti di bawah:

Kod:

package demo;
class myGeneric < x >
{
private x msg;
public x getMsg() {
return msg;
}
public void setMsg(x msg) {
this.msg = msg;
}
public String genInf1(myGeneric <String> m){
m.setMsg( "This is a Hello Message." );
return m.msg;
}
public Integer genInf2(myGeneric <Integer> m){
m.setMsg( 100 );;
return m.msg;
}
}
public class Demo {
public static void main(String[] args) {
// Before java 7 an old approach to create generic class object
myGeneric <String> msg1 = new myGeneric <String>();
msg1.setMsg( "This is a first Message.");
System.out.println(msg1.getMsg());
// type inference
myGeneric <Integer> msg2 = new myGeneric <>();
msg2.setMsg(20);
System.out.println(msg2.getMsg());
// New type inference
System.out.println(msg1.genInf1( new myGeneric<>() ));
System.out.println(msg1.genInf2( new myGeneric<>() ));
System.out.println(msg2.genInf1( new myGeneric<>() ));
System.out.println(msg2.genInf2( new myGeneric<>() ));
}
}

Output:

Inferens Jenis Java

Penjelasan: Seperti dalam kod di atas, memanggil kaedah tertentu(genInf1() dan genInf2()) tanpa menyebut secara eksplisit jenis hujah yang merupakan contoh inferens jenis baharu yang diperkenalkan dalam java 8.

Contoh #3

Seterusnya, kami menulis kod untuk memahami inferens jenis baharu di mana kami mencipta senarai mesej dengan menggunakan kelas generik Senarai dan mencipta objek kelas generik senarai untuk mesej berlainan jenis data yang berbeza dan kemudian menggunakan jenis inferens dan jenis baru inferens untuk parameter jenis, seperti di bawah:

Kod:

package demo;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main( String[] arg) {
// Before Java 7 to create a list
List <String> msg1 = new ArrayList <String>();
msg1.add("This is a first Message.");
getMsg(msg1);
// Java 7 type inference
List<String> msg2 = new ArrayList<>();
msg2.add("This is a second Message.");
getMsg(msg2);
// as list is generic class so add integer
List<Integer> msg3 = new ArrayList<>();
msg3.add(100);
getMsg1(msg3);
// Java 8 Compiler type infers type of ArrayList
getMsg(new ArrayList<>());
}
public static void getMsg(List <String> m){
if(!m.isEmpty()){
m.forEach(System.out::println);
}else System.out.println("No Message.");
}
public static void getMsg1(List <Integer> m){
if(!m.isEmpty()){
m.forEach(System.out::println);
}else System.out.println("No Message.");
}
}

Output:

Inferens Jenis Java

Kesimpulan

Inferens jenis digunakan untuk mencipta objek jenis kelas generik dan jika kita mahu pengkompil secara automatik membuat kesimpulan parameter jenis data yang tidak ditentukan daripada pas konteks.

Atas ialah kandungan terperinci Inferens Jenis Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Rujukan JavaArtikel seterusnya:Rujukan Java