>  기사  >  Java  >  자바 유형 추론

자바 유형 추론

WBOY
WBOY원래의
2024-08-30 15:17:51729검색

Java의 유형 추론은 문맥 정보에서 지정되지 않은 데이터 유형 매개변수를 자동으로 추론하는 컴파일러 프로세스입니다. 일반 클래스 유형의 객체를 생성하려는 예를 생각해 보세요. 따라서 이 객체를 생성하려면 String, Float, Integer 등과 같은 지정된 유형의 매개변수를 사용하여 코드 길이를 늘리는 일반 클래스의 구성을 호출해야 합니다. 이러한 코딩을 줄이기 위해 Java는 컴파일러가 컨텍스트에서 매개변수 유형을 판단하거나 추측하는 한 빈 유형 매개변수를 학습할 수 있는 유연성을 제공합니다. 이 외에도 Java는 사용자가 유형 매개변수에서 상속을 달성할 수 있도록 하는 와일드카드도 제공합니다. Java 8은 향상된 버전의 유형 추론을 제공합니다. 유형의 경우 추론이 사용되지 않으면 컴파일러가 확인되지 않은 변환 경고를 생성합니다.

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

구문

구문은 다음과 같습니다.

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.

Java 유형 추론 구현 예

다음으로, 일반 클래스 생성자를 사용하여 값 쌍을 허용하는 일반 클래스를 생성하고 서로 다른 데이터 쌍에 대한 일반 클래스의 객체를 생성하는 다음 예를 통해 이를 더 명확하게 이해하기 위해 Java 코드를 작성합니다. 유형을 입력한 다음 아래와 같이 유형 매개변수에 대한 유형 추론을 사용합니다.

예시 #1

코드:

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( );
}
}

출력:

자바 유형 추론

설명: 위 코드에서와 같이 일반 클래스인 pair는 클래스에서 x와 y라는 두 가지 다른 데이터 유형을 가질 수 있습니다. 여기서 처음 두 객체는 ​​정수 및/또는 문자열 유형을 양쪽에서 명시적으로 언급하여 생성되는 이전 버전의 Java입니다. 그리고 마지막 두 객체 생성 예제에서는 Java 7에서 도입된 유형이 한쪽에 언급되어 있습니다(두 번째는 공백으로 남겨둘 수 있음). 그리고 나중에 유형을 명시적으로 언급하지 않고 지정된 메소드를 호출하는 방법을 소개합니다. 다음 예에서 볼 수 있는 Java 8의 인수입니다.

예시 #2

다음으로, setter 메소드의 일반 클래스를 사용하여 다양한 메시지 유형을 받아들이는 일반 클래스를 생성하고 다양한 메시지에 대한 일반 클래스의 객체를 생성하는 새로운 유형 추론을 이해하기 위해 Java 코드를 작성합니다. 다른 데이터 유형을 선택한 다음 아래와 같이 유형 매개변수에 대한 유형 추론을 사용합니다.

코드:

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<>() ));
}
}

출력:

자바 유형 추론

설명: 위 코드와 같이 Java 8에 도입된 새로운 유형 추론의 예인 인수 유형을 명시적으로 언급하지 않고 특정(genInf1() 및 genInf2()) 메소드를 호출합니다.

예시 #3

다음으로, List 제네릭 클래스를 사용하여 메시지 목록을 생성하고 다양한 데이터 유형의 다양한 메시지에 대해 목록 제네릭 클래스의 객체를 생성하는 새로운 유형 추론을 이해하기 위한 코드를 작성합니다. 유형 매개변수에 대한 유형 추론 및 새로운 유형 추론은 다음과 같습니다.

코드:

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.");
}
}

출력:

자바 유형 추론

결론

유형 추론은 일반 클래스 유형의 객체를 생성하는 데 사용되며, 컴파일러가 컨텍스트 전달에서 지정되지 않은 데이터 유형 매개변수를 자동으로 추론하도록 하려는 경우에 사용됩니다.

위 내용은 자바 유형 추론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:자바 참조다음 기사:자바 참조