java - 如何正确扩展和实现Java泛型接口(interface)

标签 java generics interface

更新:

感谢@RC 为我解决了这个问题:

public class DataHandler<I, T extends IDataStore<I>> implements IHollywood<T, I>

从他的评论中我学会了如何修复 ActorImpl:

public class ActorImpl extends DataHandler <Long, Actor> implements IHollywood

已解决。

我目前正在尝试学习 Java,但在使用泛型方面遇到了一些困难。我坚持如何使用两个不同的类型参数正确实现通用接口(interface),然后通过扩展原始接口(interface)的另外两个接口(interface)扩展这个新实现。

这就是我想要完成的:

public interface IDataStore<ID> extends Serializable

public interface IHollywood<T extends IDataStore <ID>, ID>
{
    List<T> retrieve() throws Exception;
    void sotre(T t) throws Exception;
}

public interface IActor extends IHollywood <Actor, Long>
public interface IDirector extends IHollywood <Director, Long>

public class DataHandler<T> implements IHollywood <IDataStore<T>, T>

public class ActorImpl implements IActor extends DataHandler
public class DirectorImpl implements IDirector extends DataHandler

我有两点困惑:

  1. DataHandler 的正确签名是什么?目前我正在使用 public class DataHandler<T> implements IHollywood <IDataStore<T>, T>我知道我正在通过 T错误地作为两个参数却想不出正确的方法

  2. ActorImpl 的正确方法是什么?和 DirectorImpl实现IHollywood并扩展 DataHandler声明?

编辑/更新:

我会尽量提供更多细节:

// 1- support serialization
// provide interface to create/store/query persisted data
    public interface IDataStore<ID> extends Serializable   
    public interface IHollywood<T extends IDataStore <ID>, ID>

// 2- provide an interface for Actor specific methods
    public class Actor{}...
    public interface IActor extends IHollywood <Actor, Long>

// Implement IActor
    public class ActorImpl implements IActor

// 3- provide an interface for Director specific methods
    public class Director{}...
    public interface IDirector extends IHollywood <Director, Long>

// 4- Implement Director
    public class DirectorImpl implements IDirector

// 5- Instead of CRUD, I’ll use a better name
// Implement retrieve()/store()/find methods
    public class DataHandler <T> implements IHollywood <IDataStore<T>, T>
  1. 这样,我可以使用 DataHandler 来实现 IHollywood 的 retrieve()/store()/find() 方法。

  2. 我可以导出 ActorImplDirectorImpl来自 DataHandler使用它的 retrieve()/store()/find() 方法

  3. 我知道 IActorIDirector扩展IHollywood但我不想重复执行 IHollywood 的 retrieve()/store()/find() 方法.我想要 DataHandler实现它们和ActorImplDirectorImpl除了在自己的实现中提供自己的特定方法外,只需继承和使用它们。

我希望这能澄清一些我需要帮助的地方。

最佳答案

感谢@RC 为我解决了这个问题:

public class DataHander<I, T extends IDataStore<I>> implements IHollywood<T, I>

从他的评论中我学会了如何修复 ActorImpl:

public class ActorImpl extends DataHander <Long, Actor> implements IHollywood

已解决。

关于java - 如何正确扩展和实现Java泛型接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38292722/

相关文章:

c# - sqlite-net的通用方法

c# - 如何将类列表传递给接口(interface)列表?

java - 使用接口(interface)列表读取并保存对象列表

java - Java中接口(interface)和抽象类的混淆与示例

java - 是否可以有一个 JDBC 池将只读查询路由到从属 sql 服务器?

java - 将收集列表流式传输到 map

java - JAXB Marshall Map<Integer, ArrayList<String>>

java - 如何从 JobScheduler 的 onStartJob 打开带有 ACTION_VIEW Intent 的 url

c# - .OrderBy 函数的 System.Linq.Expressions.Expression

ios - Swift 中泛型类的冗余父类(super class)约束警告