c# - 在 C# 或 Java 中抽象一个 id 属性

标签 c# java

我正在设计 API。以下是接口(interface)中的一些示例方法:

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,它会起作用)。

澄清:我未能澄清我只编写接口(interface)(契约(Contract)),稍后可能由不同的团队实现。这就是为什么我不能强制执行某些事情,例如 equals 方法。

最佳答案

泛型是你的 friend

如果合适的话,关于方法本身

Entry findEntry<TKey>(TKey processId);

或者可能是类

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

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

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
  }
}

关于c# - 在 C# 或 Java 中抽象一个 id 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10785598/

相关文章:

java - JAXB 中对象标签之间的消息

c# - 如何管理在 C#/WPF 中看起来相似的本地化字符串?

c# - 使用 AutoMapper 将通用枚举映射到小写字符串

c# - HttpClient.PostAsync 挂起,直到所有 System.Timer 启动

c# - 如何在 winform 中使用 UI 托管控制台 exe

java - 具有自定义委托(delegate)的 MultiResourceItemReader 不断读取同一个文件

c# - nunit 测试仅在作为 tfs msbuild 进程的一部分运行时抛出异常

java - JNI + setuid 问题

Java JScrollPane - 多个组件

java - 停止 Jsoup 编码