Java 제네릭 void / Void 유형
나는 ResponseHandler다음과 같이 apache HttpClient 패키지를 구현하고 있습니다 .
new ResponseHandler<int>() {
public int handleResponse(...) {
// ... code ...
return 0;
}
}
하지만 handleResponse함수가 아무것도 반환하지 않기를 바랍니다 void. 이것이 가능한가? 다음은 void유효한 Java 유형 이 아니므로 컴파일되지 않습니다 .
new ResponseHandler<void>() {
public void handleResponse(...) {
// ... code ...
}
}
나는 대체 할 수있는 가정 void으로 Void반환 할 Void객체를,하지만 내가 원하는 것을 정말 아니다. 질문 : 그것은 가능하다 내가 반환 할 수 이러한 방법이 콜백 상황을 정리하기 void로를 handleResponse?
Generics는 객체 클래스 만 처리합니다. void 및 primitive 유형은 Generics에서 지원하지 않으며 매개 변수화 된 유형으로 사용할 수 없습니다. 대신 Void를 사용해야합니다.
왜 사용하고 싶지 않은지 말할 수 있습니까 Void?
Void유형이 정확한 상황을 만들었습니다 : 하위 유형이 "무효"가 될 수있는 일반적인 반환 형식과 방법을 만들 수 있습니다. Void해당 유형의 개체를 만들 수 없도록 설계되었습니다. 따라서 유형의 메서드 Void는 항상 반환 null(또는 비정상적으로 완료)되며, 이는 얻을 수있는 것과 거의 비슷합니다. return null메서드 를 입력 해야하지만 이것은 사소한 불편 일뿐입니다.
간단히 말해서 Void.
반환해야 할 때는 java.lang.Void반환하십시오 null.
아아 그것은 불가능합니다. Void말한대로 반환하도록 코드를 설정할 수 있지만 a를 인스턴스화 Void할 수 없으므로 실제로이 사양을 준수하는 함수를 작성할 수 없습니다.
다음과 같이 생각하십시오. 일반 함수는 "이 함수는 X 유형의 무언가를 반환합니다"라고 말하고 X를 지정할 수 있지만 문장을 "이 함수는 아무것도 반환하지 않음"으로 변경할 수 없습니다. (이 의미론에 동의하는지 확실하지 않지만 그 방식입니다.)
이 경우, 제가 항상하는 것은 함수를 return type Object으로 만들고 실제로는 항상 return null입니다.
제네릭에는 기본 형식을 사용할 수 없으므로 int실제로 integer. 객체 Void는 void제네릭 키워드와 유사합니다 .
이 Java의 java.lang.Void 구현은 그 자체로 말합니다. 또한 이것을 제네릭과 연결하는 기사를 썼습니다. http://www.siteconsortium.com/h/D00006.php를 이해하기 전에 약간의 생각이 필요했습니다 . 주의 TYPE = Class.getPrimitiveClass ( "void");
패키지 java.lang;
public final class Void {
public static final Class<Void> TYPE = Class.getPrimitiveClass("void");
private Void() {}
}
참고 URL : https://stackoverflow.com/questions/5568409/java-generics-void-void-types
'program story' 카테고리의 다른 글
| Mac OS X의 시간 초과 명령? (0) | 2020.11.14 |
|---|---|
| C # 함수의 매개 변수 또는 선택적 매개 변수에 기본값을 제공 할 수 있습니까? (0) | 2020.11.14 |
| 상수 대신 열거 형을 사용하는 이유는 무엇입니까? (0) | 2020.11.14 |
| Visual Studio에 단위 테스트에 대한 코드 적용 범위가 있나요? (0) | 2020.11.14 |
| C 전처리기로 while 루프를 작성하는 방법은 무엇입니까? (0) | 2020.11.14 |