這可能是泛型的用例。考慮下面的類安排 - 在這裏我們定義一個抽象的「參數」類型並在界面中引用它。具體類使用特定的參數集。
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