2

私はこの静的メソッドを持っています

public static List<? extends A> myMethod(List<? extends A> a) {
  // …
}

私が使用して呼び出している

List<A> oldAList;
List<A> newAList = (List<A>) MyClass.myMethod(oldAList);

へのキャストがチェックされていないため、警告が表示されList<A>ます。キャストを回避する方法はありますか?

4

4 に答える 4

9

返される型を引数と一致するように定義する必要があります(そしてAを拡張します)

public static <T extends A> List<T> myMethod(List<T> a) {
    // …
}

その後、あなたは書くことができます

List<E> list1 = .... some list ....
List<E> list2 = myMethod(list1); // assuming you have an import static or it's in the same class.

また

List<E> list2 = SomeClass.myMethod(list1);
于 2012-12-17T16:03:19.303 に答える
0

定義する場合:

public static <T extends A> List<T> myMethod(List<T> a) {
// …
}

その後、あなたは呼び出すことができます:

List = MyClass.myMethod(List a){}

それは一般的な方法ですよね?

ジルカ

于 2012-12-17T16:44:06.803 に答える
0

This is how you can avoid the cast with static methods:

public class MyClass {
    public static List<? extends A> myMethod(List<? extends A> a) {
        return a;
    }

    public static void main(String[] args) {
        List newList = new ArrayList<A>();
        List<?> newList2 = new ArrayList<A>();
        List<B> oldList = new ArrayList<B>();

        newList = MyClass.myMethod(oldList);
        newList2 = MyClass.myMethod(oldList);
    }
}

In the code above, B extends A. When newList variable is defined as List without generics or as List with wildcard type (List< ? >) cast is not necessary. On the other hand if you only want to get rid the warning you can use '@SuppressWarning' annotation. Check this link for more info What is SuppressWarnings ("unchecked") in Java?

Here is simple example for @SuppressWarnings ("unchecked"):

public static List<? extends A> myMethod(List<? extends A> a) {
  // …
}

@SuppressWarnings ("unchecked")
newAList = (List<A>) MyClass.myMethod(oldAList);
于 2012-12-18T09:08:53.130 に答える
0

Aにキャストしています。それを避けたい場合は、の戻り値の型を変更しますmyMethod

public static List<T> myMethod(List<T> a) {
  // …
}
于 2012-12-17T16:01:35.487 に答える