List<Void> 的用途是什么?

2022-09-01 03:53:07

我甚至不知道这是可行的,但我在网上阅读一些代码时看到了一个带有如下签名的方法:

public List<Void> read( ... )

...什么?这样做有什么理由吗?这还能维持什么呢?据我所知,无法实例化对象。ListVoid


答案 1

此方法签名可能是作为某个泛型类的副产品创建的。

例如,具有两个类型参数,一个用于最终结果,另一个用于中间结果。如果您只是不想使用任何中间结果,则可以作为类型参数传递,从而导致某些方法返回 - 即什么都没有。SwingWorkerVoidVoid

如果有一个方法作为类型参数,它将创建一个方法,就像您在问题中发布的那样。List<V> returnAllIntermediateResults()SwingWorkerVoidV

代码将是完全有效的。您可以使用类型参数 实例化接口的任何实现(例如 )。但是,类型可以具有的唯一值是 。因此,如果实现允许元素,则列表不能包含除 s 之外的任何其他内容。ListArrayListVoidVoidnullnullnull


答案 2

它可能有用的一种情况是,如果要从函数返回返回值的集合。说

static List<T> forEach(Func<A,T> func, List<A> items) {
   List<T> ret = new List<T>();
   for(int i = 0; i< items.length; i++) {
     ret.add(func.call(items[i]);
   }
   return ret;
}

public static void main() {
  ...
  List<Void> boringResult = 
   forEach(
    new Func<Void, Integer> {@override Void call(Integer i) {...}});
}

不是那么有用,但你可以看到一个需要它的情况。