[java] Java Void Reference Type에 사용합니까?

자바가 VoidV– 대문자 – 참조 형은 . 내가 본 유일한 상황은 Callables 를 매개 변수화하는 것입니다.

final Callable<Void> callable = new Callable<Void>() {
            public Void call() {
                foobar();
                return null;
            }
        };

Java Void참조 유형에 다른 용도가 있습니까? 그것 이외의 다른 것을 할당 할 수 있습니까 null? 그렇다면 예가 있습니까?



답변

Void에 관심이없는 일반적인 주장에 대한 관례가되었습니다.와 같은 다른 불가 한 유형을 사용해야하는 이유는 없습니다 System.

또한 자주 예에 사용된다 Map(비록 값을 Collections.newSetFromMap사용 Boolean지도로 받아 들일 필요가 없습니다 null값)와 java.security.PrivilegedAction.

몇 년 전에 웹 로그 항목 을 썼습니다 Void.


답변

리플렉션을 사용하여 Void 인스턴스를 만들 수는 있지만 아무 것도 유용하지 않습니다. 무효는 일반 메소드가 아무것도 리턴하지 않음을 표시하는 방법입니다.

Constructor<Void> constructor = Void.class.getDeclaredConstructor();
constructor.setAccessible(true);
Void v = constructor.newInstance();
System.out.println("I have a " + v);

다음과 같은 것을 인쇄합니다

I have a java.lang.Void@75636731


답변

Future<Void>매력처럼 작동합니다. 🙂


답변

공개 생성자없기 때문에 이외의 다른 것을 할당 할 수 없다고 말할 수 있습니다 null. 예제에서 보듯이 “이 일반 매개 변수를 사용할 필요가 없습니다”라는 자리 표시 자로 만 사용했습니다.

Javadoc이 말한 내용을 반영하여 사용할 수도 있습니다 .

Void 클래스는 Java 키워드 void를 나타내는 Class 객체에 대한 참조를 보유 할 수없는 자리 표시 자 클래스입니다.


답변

모든 프리미티브 래퍼 클래스 ( Integer, Byte, Boolean, Double, 등)의 고정에 대응하는 기본 클래스에 대한 참조 포함 TYPE예컨대 필드 :

Integer.TYPE == int.class
Byte.TYPE == byte.class
Boolean.TYPE == boolean.class
Double.TYPE == double.class

Voidvoid유형 에 대한 참조를 넣기 위해 처음에 어딘가로 작성되었습니다 .

Void.TYPE == void.class

그러나을 사용하여 실제로 얻는 것은 없습니다 Void.TYPE. 사용 void.class하면 void유형으로 무언가를하고 있다는 것이 훨씬 명확합니다 .

따로, 마지막으로 시도했을 때 BeanShell 은 인식하지 못했기 void.class때문에 Void.TYPE거기 에서 사용해야 합니다.


답변

당신이 사용하는 경우 방문자 패턴을 당신이 반드시 반환 값이 null이 될 것으로 할 때 청소기 대신 객체의 무효 사용할 수 있습니다

public interface LeavesVisitor<OUT>
{
   OUT visit(Leaf1 leaf);

   OUT visit(Leaf2 leaf);
}

방문자를 구현할 때 방문자를 명시 적으로 무효로 설정하여 방문자가 Object를 사용하는 대신 항상 null을 반환한다는 것을 알 수 있습니다.

public class MyVoidVisitor implements LeavesVisitor<Void>
{
    Void visit(Leaf1 leaf){
        //...do what you want on your leaf
        return null;
    }

    Void visit(Leaf2 leaf){
        //...do what you want on your leaf
        return null;
    }
}


답변

제네릭 이전에는 리플렉션 API에 대해 생성되어 다른 기본 유형 클래스에 해당하는 void 메소드에 대해 Method.getReturnType ()에 의해 리턴 된 TYPE을 보유합니다.

편집 : Void의 JavaDoc에서 : “Void 클래스는 Java 키워드 void를 나타내는 Class 객체에 대한 참조를 보유 할 수없는 자리 표시 자 클래스입니다.” 제네릭 이전에는 리플렉션 이외의 용도는 없습니다.