调用java集合使用对象的接口而不是对象的类?

时间:2013-09-16 03:51:56

标签: java collections

我想使用所有实现相同接口的对象集合来调用方法。这可能吗?

public class GenericsTest {
    public void main() {
        ArrayList<Strange> thisWorks = new ArrayList<>();
        isAllStrange(thisWorks);
        ArrayList<Person> thisDoesNot = new ArrayList<>();
        isAllStrange(thisDoesNot);
    }

    public boolean isAllStrange(ArrayList<Strange> strangeCollection) {
        for (Strange object : strangeCollection) {
            if (object.isStrange())
                return true;
        }
        return false;
    }

    public interface Strange {
        public boolean isStrange();
    }

    public class Person implements Strange {
        public boolean isStrange() {
            return true;
        }
    }
}

2 个答案:

答案 0 :(得分:5)

您可以使用<? extends Interface>表示法执行此操作:

public boolean isAllStrange(List<? extends Strange> strangeCollection) {
    for (Strange object : strangeCollection) {
        if (object.isStrange())
            return true;
    }
    return false;
}

另外,请勿直接使用ArrayList,而是使用List。更多内容:

答案 1 :(得分:1)

在Genrics中阅读WildCard

您可以使用

执行此操作
<? extends Strange >