先说一下你的几个问题
你使用一个类型参数T继承PetHospital,T的类型可能是Hippiater,Customer,Pet等。这种继承方法违反了继承的“is-A”语义,试想一下一个customer或者一个pet是一个PetHospital吗?
web曾当然可以了解bean层的对象,因为你web层的参数一般是来自于表单,那自然必须知道这个表单是为了添加什么对象的。在struts或者spring中的controller都是直接使用并且把form参数封装成bean层的对象的。
delete方法只接受一个id,那怎么知道需要删除的是什么对象?是一个customer?还是一个pet?如果这两者有相同的id?
如果一定要用范型,参考下面代码
public class Entity {
private String id;
//omit getter and setter
}
public class Pet extends Entity{
private String name;
}
public interface EntitiyService {
boolean addOne(T arg);
boolean deleteOne(int id);
List list(int page);
}
public class EntityServiceImpl implements EntitiyService {
@Override
public boolean addOne(T arg) {
System.out.println("save entity " + arg.toString());
return true;
}
@Override
public boolean deleteOne(int id) {
System.out.println("delete entity which type is T");
return false;
}
@Override
public List list(int page) {
System.out.println("query first " + page + " pages result");
return null;
}
}
public class Client {
public static void main(String[] args) {
Pet petFromForm = new Pet();
EntityServiceImpl entityService = new EntityServiceImpl<>();
entityService.addOne(petFromForm);
entityService.deleteOne(1);
entityService.list(3);
}
}