program story

Java 제네릭 void / Void 유형

inputbox 2020. 11. 14. 10:11
반응형

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. 객체 Voidvoid제네릭 키워드와 유사합니다 .


이 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

반응형