在接口扩展中指定泛型

And*_*yuk 8 java generics

在使用另一个接口扩展接口时,是否应该指定泛型类型的具体类型?

我的意思是,如果我有一个界面:

public interface Repo<T>{
      Collection<T> search(String params);
      T get(String id);
}
Run Code Online (Sandbox Code Playgroud)

然后是一堆特定的存储库,比如ClientRepo,CustomerRepo等...... 在扩展此接口时指定类型T是合理的,例如:

public interface ClientRepo extends Repo<Client>{
}
public interface CustomerRepo extends Repo<Customer>{
}
Run Code Online (Sandbox Code Playgroud)

客户和客户只是某些类.

有没有人有类似的问题?我的意思是我能做到:

public interface ClientRepo<T> extends Repo<T>{
}
Run Code Online (Sandbox Code Playgroud)

附录:也许我应该让我更清楚地了解具体的Repos(例如ClientRepo).还有另一个名为RepoFactory的接口,它将适当的Repo返回给客户端,例如:

public interface RepoFactory{
      ClientRepo createClientRepo();
      CustomerRepo createCustomerRepo();
}
Run Code Online (Sandbox Code Playgroud)

该工厂由实现者实现,实现者反过来提供具体Repos的适当实现.

事实上,从上面你可以说api的客户端没有使用接口Repo <T>.

我希望有足够的困惑!对不起:(

Edw*_*uck 6

我发现这样做有更多用处

public interface SomeRepo<T> extends Repo<T>{
}
Run Code Online (Sandbox Code Playgroud)

比通过扩展接口

public interface ClientRepo extends Repo<Client>{
}
public interface CustomerRepo extends Repo<Customer>{
}
Run Code Online (Sandbox Code Playgroud)

也就是说,我过去已经做过这两件事,并且将来很可能会同时做这两件事。如果您在后一个解决方案中检测到太多重复代码,我会尽力将其替换为前一个解决方案。

如果你想要任何实际问题,编译器似乎很难意识到“公共接口 ClientRepo 扩展 Repo”可以与 Repo 兼容。这种情况不会经常发生(但是当它发生时,需要多次尝试才能使泛型接口正确)。


And*_*yuk 0

事实证明,我正在寻找的解决方案只是扔掉所有专用接口:

public interface RepoFactory{
    Repo<Client> createClientRepo();
    Repo<Customer> createCustomerRepo(); }
Run Code Online (Sandbox Code Playgroud)

这样我既可以保留静态类型检查来强制执行 API,又可以为工厂的实现获得额外的灵活性。