Java 在DAO模式中使用泛型 //域类 公共级演员{ 私有int-id; 私有字符串名; 私有字符串lastName; 私人日期最新更新; //接球手和接球手 } //DAO接口 公共接口IDao{ 无效保存(T); } //混凝土类 公共类ActorDao实现IDao{ @凌驾 公共无效保存(参与者){ //错误:ActorDao类型的方法save(Actor)必须重写或实现超类型方法 } }
当Java 在DAO模式中使用泛型 //域类 公共级演员{ 私有int-id; 私有字符串名; 私有字符串lastName; 私人日期最新更新; //接球手和接球手 } //DAO接口 公共接口IDao{ 无效保存(T); } //混凝土类 公共类ActorDao实现IDao{ @凌驾 公共无效保存(参与者){ //错误:ActorDao类型的方法save(Actor)必须重写或实现超类型方法 } },java,generics,dao,Java,Generics,Dao,当IDao的参数为T时,为什么被重写的save()不接受Actor?您需要指定T是什么类,如下所示: // Domain Class public class Actor { private int id; private String firstName; private String lastName; private Date lastUpdate; // getters and setters } // DAO Interface pub
IDao
的参数为T
时,为什么被重写的save()
不接受Actor
?您需要指定T是什么类,如下所示:
// Domain Class
public class Actor {
private int id;
private String firstName;
private String lastName;
private Date lastUpdate;
// getters and setters
}
// DAO Interface
public interface IDao<T> {
void save(T t);
}
// Concrete Class
public class ActorDao implements IDao {
@Override
public void save(Actor actor) {
// Error: The method save(Actor) of type ActorDao must override or implement a supertype method
}
}
公共类ActorDao实现IDao{
在接口名称中使用I
违反了强大的Java惯例。此外,(1)Date
已过时;您希望使用Instant
,以及(2)如果您可以使用Spring数据,它将自动为您的DAO接口自动生成实现。看到太多的C#哈哈。Date
是java.sql.Date
。Spring数据可以用于非web应用程序吗?java.sql.Date
甚至更过时;改用java.time
和Spring数据可用于在完整JVM上运行的任何应用程序(不是Android、智能卡等)。下一步将对此进行研究,谢谢!就这个线程而言,一切都很好!
public class ActorDao implements IDao<Actor> {