在java中重用类型参数的值

时间:2012-06-28 23:04:11

标签: java generics annotations

我刚看到有人在丑陋的代码上发布了以下内容:

public static 
    Tuple<ArrayList<ArrayList<ArrayList<String>>>, 
          ArrayList<ArrayList<ArrayList<String>>>>     
    split(
          ArrayList<ArrayList<ArrayList<String>>> data, [..]);

(由我设计,以一种可笑的方式尝试获得这种半可读性)

我一直在寻找一种让这个看起来像这个(非功能性)代码的方法:

TypeParam T = ArrayList<ArrayList<ArrayList<String>>>;
public static Tuple<T,T> split( T data, [..]);

到目前为止,我找到的最佳解决方案是定义一个类(在此例如类Data中),它扩展ArrayList<ArrayList<ArrayList<String>>>,这将使代码看起来像这样:

public static Tuple<Data, Data> split( Data data, [..]);

虽然这种方法非常令人满意,但我不想放弃使用遗漏的某些方法的可能性,我想知道Java是否有办法在更美观的方式。

我正在使用的另一个解决方案是使用注释处理器为我解决这个问题,但是我觉得它错过了一定程度的简单性。

2 个答案:

答案 0 :(得分:7)

怎么样

 public static <T extends ArrayList<ArrayList<String>>> Tuple<T,T> 
      split(T data);

但我同意@esej你可能想要一些类来封装list-of-lists-of-strings数据结构。

我也不确定你是否应该ArrayList进行硬编码(而不是使用接口List)。

答案 1 :(得分:0)

您可以执行以下操作:

public static <T extends List<List<List<String>>>>  Tuple<T, T> split(T data) {

}

不要让它看起来更好IMO。