有一个Java Void- 大写的V-- 引用类型.我见过它唯一的情况是参数化Callables
final Callable<Void> callable = new Callable<Void>() {
public Void call() {
foobar();
return null;
}
};
Run Code Online (Sandbox Code Playgroud)
Java Void引用类型还有其他用途吗?可以分配除了以外的任何东西null吗?如果是的话,你有例子吗?
Pet*_*rey 48
您可以使用反射创建Void实例,但它们对任何事物都没有用.Void是一种表示泛型方法不返回任何内容的方法.
Constructor<Void> constructor = Void.class.getDeclaredConstructor();
constructor.setAccessible(true);
Void v = constructor.newInstance();
System.out.println("I have a " + v);
Run Code Online (Sandbox Code Playgroud)
打印像
I have a java.lang.Void@75636731
Run Code Online (Sandbox Code Playgroud)
Ale*_*rev 27
Future<Void>像魅力一样工作.:)
Luk*_*ard 17
所有的原始包装类(Integer,Byte,Boolean,Double,等等)包含在静态到对应的原语类的引用TYPE字段,例如:
Integer.TYPE == int.class
Byte.TYPE == byte.class
Boolean.TYPE == boolean.class
Double.TYPE == double.class
Run Code Online (Sandbox Code Playgroud)
Void最初被创建为某个地方以引入void类型:
Void.TYPE == void.class
Run Code Online (Sandbox Code Playgroud)
但是,通过使用你并没有真正获得任何东西Void.TYPE.当你使用void.class它时,你更清楚你正在做什么void类型的东西.
顺便说一句,我最后一次尝试时,BeanShell没有识别void.class,所以你必须在Void.TYPE那里使用.
使用访问者模式时,如果要确保返回值为null,则可以更清晰地使用Void而不是Object
例
public interface LeavesVisitor<OUT>
{
OUT visit(Leaf1 leaf);
OUT visit(Leaf2 leaf);
}
Run Code Online (Sandbox Code Playgroud)
当您实现访问者时,您可以明确地将OUT设置为Void,以便您知道访问者将始终返回null,而不是使用Object
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在泛型之前,它是为反射API创建的,用于保存Method.getReturnType()返回的TYPE,用于void方法,对应于其他基本类型类.
编辑:来自Void的JavaDoc:"Void类是一个不可实现的占位符类,用于保存对表示Java关键字void的Class对象的引用".在Generics之前,我意识到除了反射之外别无用处.
| 归档时间: |
|
| 查看次数: |
78909 次 |
| 最近记录: |