0

私はこのようなことをしたい

private <T extends List<?>> List<?> getFirstFiveElements(T list) {
    //body
}

ただし、引数を渡そうとすると、機能しません

List<A> a = new LinkedList<A>;
List<B> b = new LinkedList<B>; 
getFirstFiveElements(a);
getFirstFiveElements(b);

ですから、私がこれをどのように機能させるかについての提案。

4

4 に答える 4

1

以下は問題なく動作するはずです。

private static <A, T extends List<A>> List<A> getFirstFiveElements(T list) {
   //
}

Tここでは有用な目的を果たさないため、排除することができます。

private static <A> List<A> getFirstFiveElements(List<A> list) {
   //
}

メソッドが取るのと同じ型(つまりArrayList、for ArrayListLinkedListfor LinkedList)を返すようにしたい場合は、申し訳ありませんが、Javaの型システムはそれを実行できません

于 2012-06-23T22:59:49.407 に答える
1

素晴らしい2秒後、私は魔法の組み合わせを見つけました。とにかく、ここでこれに遭遇した他のすべての人にとっては、私のために働いたものです

     private <T> List<T> getStart(List<T> list)
于 2012-06-23T23:03:56.297 に答える
0

なぜテンプレートを使いたいのですか?これを使用するには十分ではありません:

private List<?> getFirstFiveElements(List<?> list) {
    //body
}
于 2012-06-23T22:45:49.233 に答える
0

これは私のために働く:

  import java.util.*;

  public class Test {

  private static <T extends List<?>> List<?> getFirstFiveElements(T list) {
    List<Object> result = new LinkedList<Object>();
    for (int i = 0; i < 5 && i < list.size(); i++) {
      result.add(list.get(i));
    }
    return result;
  }

  public static void main(String[] args) {
    List<Integer> a = new LinkedList<Integer>();
    a.add(1);
    a.add(2);
    a.add(3);
    a.add(4);
    a.add(5);
    a.add(6);
    a.add(7);
    System.out.println(getFirstFiveElements(a));
  }

}
于 2012-06-23T22:52:38.653 に答える