java - 如何从 super 列表中获取某些类对象列表的子集?

标签 java oop

我有一个List<Base>包含多个实现的所有对象,例如 FooBar 。 我如何提取完整列表的子集来获取例如所有 Foo是吗?

以下内容可以工作,但非常丑陋(重复代码、类型转换等)。

class Base;
class Foo extends Base;
class Bar extends Base;

List<Base> bases;

List<Foo> getFoos() {
    List<Foo> foos = new ArrayLista<Foo>();
    for (Base base : bases) {   
        foos.add((Foo) base);
    }

    return foos;
}

List<Bar> getBars() {
    List<Bar> Bars = new ArrayLista<Bar>();
    for (Base base : bases) {   
        Bars.add((Bar) base);
    }

    return Bars;
}

如何改进?

最佳答案

试试这个,

private <T extends Base> List<T> getSubType(Class<T> type)
{
    List<T> list = new ArrayList<T>();
    for (Base b : bases)
    {
        if (b.getClass().isAssignableFrom(type))
        {
            list.add((T) b);
        }
    }

    return list;
}

关于java - 如何从 super 列表中获取某些类对象列表的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15750371/

相关文章:

java - 在 Java 中实现接口(interface)时降低可见性

php - 何时在 PHP 中使用接口(interface)

邮件 : How do I tell gmail not to sign me into chat?

javascript - 如何删除 javascript 对象(John Resig - 简单继承)?

java - 使用 StaX 和 DTD 验证标记

java - 如何保存和恢复特定 IntelliJ 项目的终端 session ?

javascript - 如何获取实例的父实例

Javascript 对象 - 访问父级的父级

java - 多线程 Selenium WebDriver 与 Selenium Grid

java - Android 裁剪并减小视频大小