说我有一个班级
$.ajax({
url:"test.php",
type:"POST",
dataType:"json",
data:{
}
}).done(function(msg){
$( "#modal-content" ).html(msg);
});
是否可以执行类似
的操作abstract class A {
ArrayList<?> l;
public void setList(ArrayList<?> l) //set the list
}
我基本上想要指定一个带参数化字段的抽象类,其中从第一个类继承的类可以更具体地指定字段的类型,以便它必须扩展其他类型。
答案 0 :(得分:0)
您需要制作A generic:
abstract class A<T> {
abstract void setList(List<? extends T> list);
}
然后让B成像:
class B extends A<Foo> {
@Override void setList(List<? extends Foo> list) { ...}
}
答案 1 :(得分:0)
如果您通用基类,它将起作用:
abstract class A<T> {
ArrayList<T> l;
public void setList(ArrayList<T> l) {//set the list
}
}
class B<T extends Foo> extends A<T> {
@Override
public void setList(ArrayList<T> l) {//Set the list
}
}
答案 2 :(得分:0)
Java中的子类是否可以覆盖set方法并使参数类型更具体?
没有。覆盖方法时,签名(名称和参数类型)必须在类型擦除后相同。有关更多信息,请参阅JLS 8.4.2。
我基本上想要指定一个带参数化字段的抽象类,其中从第一个类继承的类可以更具体地指定字段的类型,以便它必须扩展其他类型。
abstract class A<T> {
public abstract void setList(ArrayList<? extends T> l);
}
class B extends A<Integer> {
@Override
public void setList(ArrayList<? extends Integer> l) {
//...
};
}
这里编译器将执行类型擦除,签名将完全相同。