java.lang.Void와 void의 차이점은 무엇입니까?
API에서
"Void 클래스는 Java 키워드 void를 나타내는 Class 객체에 대한 참조를 보유하는 인스턴스화 할 수없는 플레이스 홀더 클래스입니다."
- "Ininstantiable"자리 표시 자 클래스 란 무엇입니까? 언제
java.lang.Void
사용됩니까? 클래스가 "ininstantiable"이면 어떤 용도로 사용됩니까? java.lang.Void
과의 차이점은 무엇입니까void
?
만 점 의는 Void
보류하는 것입니다 Void.TYPE
종류 등이다 void.class
. 를 반환하는 메서드에 대한 반사 참조가 있고 void
반환 유형을 가져 오면 Void.TYPE
.
다른 용도로 사용할 수 없으며 사용해서는 안됩니다.
java.lang.Void
과 유사합니다 java.lang.Integer
. Integer
기본 유형의 값을 박싱하는 방법입니다 int
. Void
기본 유형의 값을 박싱하는 방법입니다 void
.
"하지만 잠깐, void
가능한 값이 없습니다!"
권리! 그것이 java.lang.Void
"불필요한"것입니다. :)
모든 프리미티브 유형이 박스형에 해당하는 Java 유형 시스템의 멋진 기능입니다. int
has Integer
, long
has Long
, byte
has Byte
... 및 void
has Void
. 존재 Void
하지 않는다면 이상하고 비대칭적일 것 입니다.
"그래서 차이 무엇 java.lang.Void
과 void
?"
쉬운. void
기본 유형입니다. Void
에서 상속되는 참조 유형입니다 Object
. 둘 다 가능한 값이 없다는 점에서 비슷합니다. 그럼에도 불구하고 유형 시스템의 관점에서 보면 두 가지 매우 다른 유형입니다.
"하지만 나는 Void
내 프로그램에서 아무 소용이 없다 ."
그리고 나는 GarbageCollectorMXBean
내 용도가 없습니다 . 일부 기능은하지 않습니다 가 아닌 모호한 사용합니다. 괜찮아요.
의 가장 일반적인 용도 Void
는 반 사용 이지만 이것이 사용될 수있는 유일한 장소는 아닙니다.
void
함수가 값을 생성하지 않음을 의미하는 키워드입니다.
java.lang.Void
참조 유형이면 다음이 유효합니다.
Void nil = null;
(지금까지는 흥미롭지 않습니다 ...)
결과 유형 (반환 값이 type 인 Void
함수)은 * 항상 * 함수가 반환 함을 의미합니다 null
( 인스턴스가 없기 null
때문에 Void
를 제외한 다른 것을 반환 할 수 없음 ).
Void function(int a, int b) {
//do something
return null;
}
항상 null을 반환 하는 함수를 원하는 이유는 무엇 입니까?
제네릭이 발명되기 전에는 Void
.
제네릭에는 몇 가지 흥미로운 사례가 있습니다. 예를 들어, a Future<T>
는 다른 스레드에서 수행 한 비동기 작업의 결과에 대한 홀더입니다. Future.get
연산 값 (유형 T
) 을 반환하고 계산이 수행 될 때까지 차단됩니다.
하지만 ... 돌아갈 것이 없다면? 단순함 : Future<Void>
. 예를 들어 Google App Engine에서 비동기 데이터 저장소 서비스 delete
작업 은 삭제가 완료된 후 향후 . When
get () is invoked on that future,
null을 반환 합니다. Callable s 로 비슷한 예제를 작성할 수 있습니다.
또 다른 사용 사례는 Map
값 이 없는 것 Map<T,Void>
입니다. 이러한지도는처럼 동작하며 Set<T>
,에 상응하는 구현이 없을 때 유용 할 수 있습니다 Set
(예 :가없는 WeakHashSet
경우 a를 사용할 수 있음 WeakHashMap<T,Void>
).
Void는 void의 AutoBoxing 기능 (JDK 1.5 이후)입니다.
Void는 참조이고 void는 원시 유형이라는 자체 설명입니다.
따라서 요구 사항이 Void를 사용해야하는 곳 ???
기본 유형을 사용할 수없는 Generic 유형의 일반적인 사용법 중 하나입니다.
Android의
AsyncTaks<Params, Progress, Result>
경우 진행률 업데이트를 받고 싶지 않으면 어떻게합니까? 여기서는 void (기본 유형)를 사용할 수 없습니다. java.lang.Void가 필요합니다.
사용 Void
에 대한 또 다른 예 는SwingWorker
new SwingWorker<Void, Integer> () {
@Override
protected Void doInBackground(){
...
}
@Override
protected void process(List<Integer> chunk){
...
}
@Override
public void done(){
...
}
}.execute();
Void는 때때로 메서드 자체 외부에서 메서드의 반환 유형을 지정해야하기 때문에 유용합니다.
예를 들어라는 메서드를 사용하여 EventResource 객체에 특정 속성이 있는지 확인하는 다음 Java 8 람다 표현식을 사용하여 메서드 checkBenefitConcertInCentralPark
에 전달합니다 checkCreatedEvent
.
eventChecker.checkCreatedEvent(TestEvents::checkBenefitConcertInCentralPark);
checkBenefitConcertInCentralPark
방법은 (공허의 사용에주의)과 같이 정의된다 :
public static Void checkBenefitConcertInCentralPark(EventResource eventResource) {
// JUnit code here...
// assertThat(blablabla :) )
return null; // we can only return null at the end of a method when returning Void
}
그런 다음 checkBenefitConcertInCentralPark
메서드가 메서드에 전달됩니다 checkCreatedEvent
.
// Function<EventResource, Void> describes the checkBenefitConcertInCentralPark method
public void checkCreatedEvent(Function<EventResource, Void> function) {
function.apply(this.eventResource);
}
ReferenceURL : https://stackoverflow.com/questions/10839042/what-is-the-difference-between-java-lang-void-and-void
'Nice programing' 카테고리의 다른 글
Swift를 사용하여 Xcode에서 배경 이미지를 설정하는 방법은 무엇입니까? (0) | 2020.12.31 |
---|---|
조각 내에서 토스트 사용 (0) | 2020.12.31 |
Python : SWIG 대 ctypes (0) | 2020.12.31 |
WKWebView에서 확대 동작 비활성화 (0) | 2020.12.31 |
Firefox 4 필수 입력 양식 빨간색 테두리 / 개요 (0) | 2020.12.31 |