不确定标题是否有意义,我会尽力解释。我有一个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
方法,仅对A1
和A2
使用此自定义列表,我确信obj.getCustomBoolean()
不会导致例外。
我需要一种方法来指定T是A的子类。
答案 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());