Java에 auto type이 있나요?
여기도 있어요?auto
C++에서처럼 자바에서도 변수 타입을 사용할 수 있습니까?
예:
for ( auto var : object_array)
std::cout << var << std::endl;
for( auto var : object_array)
var.do_something_that_only_this_particular_obj_can_do();
Java에 확장 루프 기능이 있는 것은 알고 있습니다만, auto가 있습니까?그렇지 않다면, 이것을 하는 데 묘안이 있나요?C++11의 신기능을 참조하고 있습니다.
Java 10은 사용자(및 나)가 원하는 기능을 가지고 있을 수 있습니다.var
키워드를 지정합니다.
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
JDK 확장 제안서 286에서
업데이트: Yap, 이 기능은 Java 10 릴리즈에 추가되었습니다!
Java 10은var
C++와 같은 식별자auto
sorrymissjackson의 답변을 참조하십시오.
Java 10보다 이전 버전에서는auto
키워드를 지정합니다.다음과 같은 루프를 실현할 수 있습니다.
for ( Object var : object_array)
System.out.println(var);
Java에는 로컬 변수가 있으며, 해당 변수는 정의된 블록 내에 있습니다.C 및 C++와 비슷하지만 auto 키워드 또는 register 키워드는 없습니다. 단, Java 컴파일러는 명시적으로 초기화되지 않은 로컬 변수를 사용할 수 없으며 컴파일 오류가 발생합니다(C 및 C++와는 달리 컴파일러는 보통 경고만 표시합니다).우대:위키피디아.
Java에서는 C++와 같은 메인스트림 타입 인퍼런스는 없었습니다.RFE는 있었지만 "Will not fix"로 종료되었습니다.주어진 내용은 다음과 같습니다.
인간은 두 가지 방법으로 유형 선언의 중복성으로부터 이익을 얻는다.우선 다중 유형은 귀중한 문서로서 기능합니다.독자는 getMap() 선언을 검색하여 어떤 유형을 반환하는지 확인할 필요가 없습니다.둘째, 용장성은 프로그래머가 의도된 유형을 선언할 수 있도록 하며, 따라서 컴파일러에 의해 실행되는 크로스 체크로부터 이익을 얻는다.
Java 7은 다이아몬드 구문을 도입했습니다.
Box<Integer> integerBox = new Box<>(); // Java 7
오래된 자바와 비교해서
Box<Integer> integerBox = new Box<Integer>(); // Before Java 7
이 새로운 구문은 원래 질문의 for 루프를 쓰는 데 도움이 되지 않습니다.맞습니다. 그리고 전적으로 의도적인 것 같습니다.Oracle의 버그 데이터베이스를 인용하는 다른 답변을 참조하십시오.
Java 8에서는 람다 유형 추론을 사용하여 유형이 선언되지 않도록 할 수 있습니다.질문자의 예와 유사한 예는 다음과 같습니다.
object_array.forEach(obj -> System.out.println(obj));
object_array.forEach(obj -> obj.do_something_that_only_this_particular_obj_can_do());
두 가지 모두 방법 참조를 사용하여 단순화할 수 있습니다.
object_array.forEach(System.out::println);
object_array.forEach(ObjectType::do_something_that_only_this_particular_obj_can_do);
즉, 자동 타입은 없습니다.값을 인쇄하는 것밖에 할 수 없는 경우는, 그 값을 「Value」라고 부릅니다.Object
.
순수한 자바 솔루션은 아니지만 lombok이라는 라이브러리를 추가하면 아래와 같은 마법이 컴파일되고 동작할 수 있습니다.auto
C++ 키워드
List<String> strList = Arrays.asList("foo", "bar", "baz");
for (val s: strList){
System.out.println(s.length());
}
언급URL : https://stackoverflow.com/questions/16132759/is-there-auto-type-inferring-in-java
'source' 카테고리의 다른 글
MySQL의 ORDER BY RAND() 함수를 최적화하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
---|---|
npm start 실행 시 Start 스크립트 누락 오류 (0) | 2022.09.23 |
Keras LSTM의 개요 (0) | 2022.09.23 |
마리아에서 메타 개체 데이터 숨기기nodejs 사용 시 DB (0) | 2022.09.23 |
Windows WSL2에서 Ubuntu의 MariaDB에 있는 INSERT INTO ...에 삽입하면 일부 열의 데이터가 손상됩니다. (0) | 2022.09.23 |