[java] 메서드의 반환 유형이 Void이면 무엇을 반환합니까? (공허하지 않습니다!)

Java에서 Generics를 사용하기 때문에 Void반환 유형을 갖는 함수를 구현해야했습니다 .

public Void doSomething() {
    //...
}

그리고 컴파일러는 내가 뭔가를 반환하도록 요구합니다 . 지금은 그냥 돌아오고 null있지만 이것이 좋은 코딩 연습인지 궁금합니다 …

나는 v ‌oid가 아니라 V ‌oid 에 대해 묻는다 . 클래스 , 하지 예약 된 키워드 .Voidvoid

나는 또한 시도했다 Void.class, void, Void.TYPE, new Void(), 전혀 작동하지 않습니다 전혀 전혀 반환 있지만, 모든. (어느 정도 분명한 이유) (자세한 내용은 이 답변 참조)

  • 함수의 반환 유형이 다음과 같으면 무엇을 반환해야 Void합니까?
  • Void수업 의 일반적인 용도는 무엇입니까 ?


답변

그래서 함수의 반환 유형이되어야한다면 무엇을 반환해야 Void합니까?

사용 return null. Void인스턴스화 단지에 대한 자리 표시 자입니다 수없는 Class<T>유형 void.

요점은 Void무엇입니까?

위에서 언급했듯이 자리 표시 자입니다. Void예를 들어 리플렉션을 사용하여 반환 유형이 void. (기술적으로는 다시 돌아올 것 Class<Void>입니다.) Callable<T>.

Java에서 제네릭을 사용하기 때문에이 기능을 구현해야했습니다.

이 서명으로 메서드를 구현해야하는 경우 API에 뭔가 펑키 할 수 있다고 말하고 싶습니다. 원하는 작업을 수행하는 더 좋은 방법이 있는지 신중하게 고려하십시오 (다른 후속 질문에서 더 자세한 내용을 제공 할 수 있습니까?). 이것은 “제네릭의 사용으로 인해”나온 것이기 때문에 조금 의심 스럽습니다.


답변

Void를 인스턴스화하는 방법이 없으므로 반환 할 있는 유일한 것은 null입니다.


답변

return null 갈 길입니다.


답변

귀하가 제공 한 다른 제안이 작동하지 않는 이유를 명확히하려면 :

Void.classVoid.TYPE같은 객체를 가리키고 타입 인 Class<Void>의하지 Void.

그렇기 때문에 해당 값을 반환 할 수 없습니다. new Void()유형 Void이지만 해당 생성자는 존재하지 않습니다. 사실, Void공용 생성자가 없으므로 인스턴스화 할 수 없습니다 . Void다형성을 제외하고 유형의 객체를 가질 수 없습니다 null.

도움이 되었기를 바랍니다! 🙂


답변

모호한 이유로이 유형을 사용해야한다면 반환 값이 어쨌든 사용되지 않을 것이라고 가정하기 때문에 실제로 null을 반환하는 것이 현명한 옵션 인 것 같습니다.
컴파일러는 어쨌든 무언가를 반환하도록 강제합니다.
그리고이 클래스에는 공개 생성자가없는 것 같으므로 new Void ()는 불가능합니다.


답변

이렇게.

public Class TestClass {
    public void testMethod () {
        return;
    }
}


답변