如何正确扩展和实现Java通用接口

时间:2016-07-10 14:03:13

标签: java generics interface

更新:

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

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

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

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

解决。

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

这就是我想要实现的目标:

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 DataHander<T> implements IHollywood <IDataStore<T>, T>

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

我有两点困惑:

  1. DataHander的正确签名是什么?目前我正在使用public class DataHander<T> implements IHollywood <IDataStore<T>, T>,我知道我错误地将T作为两个参数传递但是无法找到正确的方法

  2. ActorImplDirectorImpl实施IHollywood并延长DataHander声明的正确方法是什么?

  3. 编辑/更新:

    我会尝试提供更多细节:

    // 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
    // Implent retireve()/store()/find methods
        public class DataHander <T> implements IHollywood <IDataStore<T>, T>
    

    1- 这样,我可以使用DataHander来实现IHollywood的retireve()/ store()/ find()方法

    2- 我可以从DataHander派生ActorImpl和DirectorImpl来使用它的retireve()/ store()/ find()方法

    3- 我知道IActor和IDirector扩展了IHollywood,但我不想复制IHollywood的retireve()/ store()/ find()方法的实现。我希望DataHander能够植入它们,而ActorImpl和DirectorImpl只是继承并使用它们,除了在自己的实现中提供自己的特定方法。

    我希望这能澄清我需要帮助的内容。

1 个答案:

答案 0 :(得分:1)

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

   public List<string> readXmlToList(string filename)
    {
        List<string> lines = List<string> lines = new List<string>();
        XmlDocument doc = new XmlDocument();
        doc.Load(filename);
        foreach (XmlNode node in doc.DocumentElement.ChildNodes)
        {
            lines.Add(
            node.Attributes["City"].ToString()+"," 
            + node.Attributes["code"].ToString()+","
            + node.Attributes["name"].ToString()+","
            + node.Attributes["Zip"].ToString());
        }
        return lines;
    }

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

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

解决。