4

私は誰かが醜いコードの暴言で次のように投稿しているのを見ました:

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には、これをさらに美的に行う方法があるのではないかと思います。楽しい方法。

私が遊んでいる別の解決策は、注釈プロセッサを使用してこれを修正することですが、これはある程度の単純さを欠いていると感じています。

4

2 に答える 2

7

どうですか

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

しかし、おそらくいくつかのクラスに list-of-lists-of-lists-of-strings データ構造をカプセル化する必要があるという @esej に同意します。

ArrayListまた、インターフェイスを使用するのではなく、そこにハードコーディングする必要があるかどうかもわかりませんList

于 2012-06-28T23:12:27.150 に答える
0

次のようなことができます。

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

}

IMO の見栄えが良くなるわけではありません。

于 2012-06-28T23:19:47.190 に答える