1

我正在设计一个 API。以下是来自接口的一些示例方法:

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

whereprocessId指的是一些唯一的识别信息。但是我真的不知道它的类型processId是什么。

我怎样才能抽象出某个元素之类id的东西?

我能想到的最好的方法是创建一个虚拟接口:

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

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

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

4

1 回答 1

6

泛型是你的朋友

如果合适的话,在方法本身上

Entry findEntry<TKey>(TKey processId);

或可能的班级

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

编辑:如果您正在定义接口,您也可以在那里定义它并将其留给接口的实现者来确定他们想要使用什么类型来识别条目。

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
  }
}
于 2012-05-28T13:43:08.163 回答