如何使用不同类型的列表初始化对象?

Chr*_*wes 5 java generics

嘿,我正在ListRepository使用两种不同类型的初始化列表初始化.最好的方法是这样的.

public ListRepository(String id, List<PrimaryKey> initilizationList)
{
   // Load objects from data source via primary key.
}

public ListRepository(String id, List<DomainObject> initilizationList)
{
   // Store objects directly
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于运行时类型擦除,这是不可能的.我不喜欢构造函数方法List<?>作为参数,这会导致对instanceof第一个条目的丑陋检查,以确定列表类型并处理它.

如何使用直观,干净的API解决这样的问题?

Pet*_*rey 4

构造函数所做的远不止初始化对象。最好保持构造函数简单。

我将使用静态方法来执行每个查询。

public static ListRepository<PrimaryKey> loadFromPrimaryKey(String id, List<PrimaryKey> initilizationList) {
   // Load objects from data source via primary key.
}

public static ListRepository<PrimaryKey> loadFromDomainObject(String id, List<DomainObject> initilizationList) {
   // Store objects directly
}
Run Code Online (Sandbox Code Playgroud)

您将拥有一个仅获取结果数据的构造函数。这将使这些方法将构建什么变得更加清晰。