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

标签 java collections

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

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;
        }
    }
}

最佳答案

您可以使用 <? extends Interface> 执行此操作符号:

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

另外,不要使用 ArrayList直接使用 List .更多信息:

关于java - 调用 java 集合使用对象的接口(interface)而不是对象的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18820160/

相关文章:

java - 为什么对 Map 的同步访问会增加大量开销

Java多选对话框

Nhibernate 不会从集合中删除 child

java - 将子列表与对象列表分开

java - 计算 1918-03-24 之后的天数时,Joda 时间差一错误

Java:从控制台读取直到得到一个空行

java - Jasper 和 .xlsx 的内容消息不可读

java - Google App Engine 数组列表不是受支持的属性类型

具有通用版本 8 和 17 的 Java 实例类型

scala 集合 : map a list and carry some state?