public interface Page<T> {
T nextPage();
}
它的實作
public class ConcretePageA implements Page<TypeA> {
public TypeA nextPage() {
// do stuff
}
}
然后我有一個消耗的介面 Page
public interface Source {
<T> int getData(Page<T> page)
}
及其實作
public class ConcreteSourceA implements Source {
public int getData(Page<TypeA> page) { //error: getData in ConcreteSourceA clashes with getData in Source
// do stuff
}
}
我試過這個,但它也不起作用
public class ConcreteSourceA implements Source {
public <TypeA> getData(Page<TypeA> page) { // error: expect com.foo.TypeA but got TypeA
// do stuff
}
}
當我執行上述操作時,我收到一個編譯錯誤說
getData in ConcreteSourceA clashes with getData in Source
我知道我做錯了什么,但是如何在仍然有多個使用不同型別的實作的情況下修復它?
我一開始就做錯了嗎?泛型不是解決這個問題的正確方法嗎?
uj5u.com熱心網友回復:
看起來你想讓Source泛型很像Page- 像這樣:
public interface Source<T> {
int getData(Page<T> page);
}
然后,您可以定義僅實作某些特定化的實作,例如
public class ConcreteSourceA implements Source<TypeA> {
public int getData(Page<TypeA> page) {
// do stuff
return 0;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311159.html
