使用T类扩展ArrayList <t> </t>的方法

时间:2014-04-23 08:55:16

标签: java android arraylist extends

不确定标题是否有意义,我会尽力解释。我有一个CustomList扩展ArrayList,T代表Class A1和Class A2,它们都扩展了A类,这是一个自定义类。

我需要这样做:

public class CustomList<T> extends ArrayList<T>
{
    public CustomList()
    {
        super();
    }

    public boolean add(T obj)
    {
        /*The method getCustomBoolean() is not defined for the type T*/
        if(obj.getCustomBoolean())
        {
            super.add(obj);
        }

        return true;
    }
}

方法getCustomBoolean()Class A方法,仅对A1A2使用此自定义列表,我确信obj.getCustomBoolean()不会导致例外。

我需要一种方法来指定T是A的子类。

5 个答案:

答案 0 :(得分:3)

将班级的第一行改为此。

public class CustomList<T extends A> extends ArrayList<T>

这指定T可以是A的子类型的任何类型。它允许您在班级代码中的A对象上使用T类型的方法。

答案 1 :(得分:2)

这样做:

class A
{
    public boolean getCustomBoolean() {
        return false;
    }
}

class CustomList<T extends A> extends ArrayList<T>
{
    private static final long serialVersionUID = 1L;

    public CustomList()
    {
        super();
    }

    public boolean add(T obj)
    {
        if(obj.getCustomBoolean())
        {
            super.add(obj);
        }

        return true;
    }
}

答案 2 :(得分:1)

如果您只将此CustomList与子类A一起使用,那么您可以将CustomList类声明为:

public class CustomList<T extends ClassA> extends ArrayList<T>

但如果没有,那么你必须重新考虑你的设计。

答案 3 :(得分:1)

使用:

class CustomList<T extends A> extends ArrayList<A>

答案 4 :(得分:1)

这很好用:

class A {
    public boolean getCustomBoolean () {
        return true;
    }
};
class A1 extends A {};
class A2 extends A {};

class CustomList<T extends A> extends ArrayList<A> {
    public boolean add (T obj) {
        if ( obj.getCustomBoolean() ) {
            super.add(obj);
        }
        return true;
    }
}

请注意,如果您展开ArrayList<A>,则可以添加A1 A2类型的项目,但如果您延长ArrayList<T>,则会受到限制到声明中的类型。

    CustomList<A1> a1 = new CustomList<>();
    CustomList<A2> a2 = new CustomList<>();
    // Fine.
    a1.add(new A1());
    // Fine if you extend ArrayList<A> - not allowed if you extend ArrayList<T>.
    a2.add(new A1());