gpt4 book ai didi

java - 如何更改实现接口(interface)的继承类的参数?

转载 作者:行者123 更新时间:2023-12-02 00:26:15 25 4
gpt4 key购买 nike

我有一个接口(interface)和一个实现该接口(interface)的类,如下所示:

public interface DocumentDAO<T>{
public long insert (T doc);
}

public class PostgreSQLDocumentDAO implements DocumentDAO<Document>{
public long insert(Document doc){}
protected void insertDocument(Document doc){}
}

我想重写 PostgreSQLDocumentDAOinsert 方法,将参数从 Document 更改为 Page,其中 < em>Page 是一个扩展 Document 的类。

我想要这样的东西:

public class PostgreSQLPageDAO extends PostgreSQLDocumentDAO{
public long insert(Page doc){
super.insertDocument(page);
//specific implementation goes here
}
}

我怎样才能得到这个?

<小时/>

更新:上面的代码不正确,因为名为 Inserter 的类使用接口(interface) DocumentDAO。当它调用insert方法时,即使是一个PostgreSQLPageDAO对象,它也会调用insert方法来插入Document,因为这个方法是继承的。

我想做一种方法,当Inserter类调用insert方法时,它使用插入页面的方法。这样,我想我需要覆盖 PostgreSQLDocumentDAO 中的 insert (Document doc)

最佳答案

这里有两个选项。

  1. 您可以修改 PostgreSQLDocumentDAO

然后你将其更改为

public class PostgreSQLDocumentDAO<D extends Document> implements DocumentDAO<D>

public class PostgreSQLPageDAO extends PostgreSQLDocumentDAO<Page>

2.您无法修改PostgreSQLDocumentDAO

然后您需要使用以下方法重载并覆盖 PostgreSQLPageDAO 中的插入方法:

// Override
@Override
public long insert(Document doc){
if (!(doc instanceof Page))
throw new IlegalArgumentException("insert only accepts Page");
super.insert(doc);
}

// Overload
public long insert(Page page){
super.insert(page);
}

关于java - 如何更改实现接口(interface)的继承类的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9956856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com