我们可以在同一Generic PlaceHolders中传递单个对象以及对象列表

时间:2017-03-24 22:35:33

标签: java generics

我的问题非常简单,我们可以在方法中的相同通用占位符中传递单个Java对象以及Java对象列表。

例如:       processData(T t)/processData(List<T> t)

是否有可能将其分为一种方法和一种方法。一个通用占位符,它可以同时包含Java中的单个通用对象或通用对象列表

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,你需要一个可以处理单个元素或某个元素类型列表或类型参数T而不会重载的方法。

最接近的是重载,如果你想共享代码,可以通过将单个元素打包到单个列表中,将单个元素方法委托给List方法:

class X<T> {
   public void processData(T t) { processData(Collections.singletonList(T)); }
   public void processData(List<T> ts) { ... }; 
} 

但是,通常您希望在单个元素方法中自定义代码,以使其在特殊情况下运行得更快。

如果您放弃使用List并且您很乐意使用数组,那么您可以使用vararg,但是在引擎盖下,您总是将数组传递给方法:

class X<T> {
   public void processData(T ... ts) {
       for (T t : ts) { ... };
   } 
} 
...
T x, y, z;
T[] xxx;
...
// the following are all valid calls to processData:
processData(x);
processData(x, y, z);
processData(xxx);

答案 1 :(得分:0)

是。例如:

public class MyWorker<T> {
  public void processData(T t){ }
  public void processData(List<T> t) {}
}