返回一个Void对象
当它不是一个原始类型时,返回Void
类型的正确方法是什么?例如。我目前使用null如下。返回一个Void对象
interface B<E>{ E method(); }
class A implements B<Void>{
public Void method(){
// do something
return null;
}
}
Void类是一个不可实例化占位符类保持于表示Java关键字空隙类对象的引用。
因此,任何以下的就足够了:
- 参数化与
Object
和返回new Object()
或null
- 参数化与
Void
和与你的NullObject
null
您不能使此方法void
,而其他任何返回东西。由于某些东西被忽略,你可以返回任何东西。
没有通用类型告诉编译器一个方法什么都不返回。
我相信习惯是使用对象作为参数类型继承
OR
传播类型参数了,然后你的类实例化的用户使用对象和分配对象给一个变量类型化让当使用类型通配符?
:
interface B<E>{ E method(); }
class A<T> implements B<T>{
public T method(){
// do something
return null;
}
}
A<?> a = new A<Object>();
这是将返回类型设置为void的惯例 - 它看起来不是很有效对我来说? – Robert 2010-03-09 11:48:15
我相信这是要走的路。 “A >”类的任何用户将无法使用方法()的返回值。 – 2010-03-09 11:56:29
如果你只是什么都不需要为你的类型,你可以使用无效。这可以用于实现功能或操作。那么你可以做这样的事情:
interface Action<T> {
public T execute();
}
abstract class VoidAction implements Action<Void> {
public Void execute() {
executeInternal();
return null;
}
abstract void executeInternal();
}
或者你可以省略抽象类,并做回空的,不需要自己一个返回值的每一个动作。
然后,您可以使用这些操作是这样的:
给出的方法
private static <T> T executeAction(Action<T> action) {
return action.execute();
}
你可以这样调用它
String result = executeAction(new Action<String>() {
@Override
public String execute() {
//code here
return "Return me!";
}
});
,或者为无效动作(注意,你”不要将结果分配给任何东西)
executeAction(new VoidAction() {
@Override
public void executeInternal() {
//code here
}
});
Java 8引入了一个新类,Optional<T>
,可以在这种情况下使用。要使用它,你会略微修改代码如下:
interface B<E>{ Optional<E> method(); }
class A implements B<Void>{
public Optional<Void> method(){
// do something
return Optional.empty();
}
}
这使您可以确保您始终从你的方法获得一个非空返回值,即使没有什么返回。当与检测null
何时可以退货或不能退货的工具一起使用时,这特别有用。 Eclipse @NonNull
和@Nullable
注释。
我的意见是,这是错误的方向。返回一个更加约束的类型会更好地传达更清晰的意思。有一件事返回一个'可选
你需要什么? – Bozho 2010-03-09 11:34:14
我正在使用解释器模式为文件格式编写解释器,但某些表达式没有返回值 – Robert 2010-03-09 11:36:33
无法实例化Void类型,因此如果您确实必须返回某种类型的值,则为null你唯一的选择。但是,你可能不需要任何返回值,所以null应该没问题。 – Jorn 2010-03-09 11:52:47