在C#或Java中抽象id属性

时间:2012-05-28 13:38:13

标签: c# java

我正在设计一个API。以下是界面中的一些示例方法:

Entry findEntry(int processId);
Entry findEntry(int processId, Filter filter);

其中processId指的是一些独特的识别信息。但是我真的不知道processId的类型是什么。

如何抽象出id之类的元素?

我能想到的最好的就是创建一个虚拟界面:

Entry findEntry(ProcessId id);
Entry findEntry(ProcessId, Filter filter);

但是,我担心通过上述方法,我可能会强制API的客户端在过高的抽象级别上运行。例如,进程id的相等性将不再起作用(而如果它们使用int - 它就会)。

澄清:我没有说明我只编写了接口(合同),稍后可能会由不同的团队实施。这就是为什么我不能强制执行某些事情,比如equals方法。

1 个答案:

答案 0 :(得分:6)

泛型是你的朋友

如果合适,

关于方法本身

Entry findEntry<TKey>(TKey processId);

或可能是班级

public class EntryFinder<TKey>
{
  public Entry findEntry(TKey processId)
  {
     // Implementation
  }
}

编辑:如果您正在定义界面,您也可以在那里定义它并将其留给界面的实现者,以确定他们想要用什么类型来识别一个Entry。 / p>

public interface IEntryFinder<TKey>
{
  Entry findEntry(TKey processId);
}

用法:

// Foo's are looked up by integer
public class FooEntryFinder : IEntryFinder<int>
{
  public Entry findEntry(int processId)
  {
     // Implementation
  }
}
// Baa's are looked up by string
public class BaaEntryFinder : IEntryFinder<string>
{
  public Entry findEntry(string processId)
  {
     // Implementation
  }
}