这可能是泛型的用例。考虑下面的类安排 - 在这里我们定义一个抽象的“参数”类型并在界面中引用它。具体类使用特定的参数集。
abstract class HandlerParams {
}
interface FileHandler<T extends HandlerParams> {
boolean uploadFile(T parameters);
OutputStream downloadFile(T parameters);
}
示例实现:
class URLParams extends HandlerParams {
// whatever...
}
class URLFileHandler implements FileHandler<URLParams> {
@Override
public boolean uploadFile(URLParams parameters) {
// ...
}
@Override
public OutputStream downloadFile(URLParams parameters) {
// ...
}
}
我必须承认,我挣扎想象场景中这种安排将是有益的。我想你可以有一些与文件处理工作,但感觉有点假:如果你有一个基础上,实现者类型不同的参数类型/计数打电话,你有两种常见的选择
class SomethingThatUsesFileHandlers {
public <T extends HandlerParams> void doSomething(FileHandler<T> handler,
T params) {
handler.downloadFile(params);
}
}
如何使用泛型?处理对象类型对于API来说并不是一个好设计..我们可以通过......任何我们想要的东西......这将需要被施放(如果/其他角度看起来很丑陋) – Mik378