gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:42:02 24 4
gpt4 key购买 nike

更新:

感谢@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/

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