更新:
感谢@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
我有两点困惑:
DataHander的正确签名是什么?目前我正在使用public class DataHander<T> implements IHollywood <IDataStore<T>, T>
,我知道我错误地将T
作为两个参数传递但是无法找到正确的方法
ActorImpl
和DirectorImpl
实施IHollywood
并延长DataHander
声明的正确方法是什么?
编辑/更新:
我会尝试提供更多细节:
// 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只是继承并使用它们,除了在自己的实现中提供自己的特定方法。
我希望这能澄清我需要帮助的内容。
答案 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>
解决。