[英]Java abstract primitive array addition
當給定原始 arrays 時,
int[] iArr = new int[]{0,1,2,3,4};
long[] lArr = new int[]{0,1,2,3,4};
double[] dArr = new int[]{0,1,2,3,4};
並且每個由供應商提供,
class IarrSupplier {
int[] supply();
}
class LarrSupplier {
long[] supply();
}
class DarrSupplier {
double[] supplyer();
}
如何以抽象的方式將它們全部添加? 如
interface PSupplier<T> {
T[] supply();
}
提供者是實現PSupplier<T>
class IarrSupplier implements PSupplier<int> {
int[] supply();
}
class LarrSupplier implements PSupplier<long[]> {
long[] supply();
}
class DarrSupplier implements PSupplier<double[]> {
double[] supplyer();
}
我知道 java 不支持原始類型泛型。 所以上面根本不起作用。
但如果它有效,我希望這樣做,
// same or several type of PSuppliers will be provided.
PSupplier[] suppliers = polymorphsSuppliers();
long[] totalSumArray = [my_fixed_length];
for(PSupplier supplier : suppliers){
for(int i = 0 ; i < totalSumArray.length ; i++){
totalSumArray[i] += supplier.supply()[i];
}
}
有什么可能/更好的設計來做到這一點?
簡而言之,
我不知道您到底想做什么,但是我可以看到有關您的代碼的幾個問題。 我猜你想遍歷一個一維數組,所以,在接口PSupplier中,不需要聲明返回數組T[]的方法,所以固定代碼是:
interface PSupplier<T> { T supply(); }
現在從 PSupplier 接口實現的下一個類,它們的泛型類型必須是您想要的數據類型的數組,例如:
class IarrSupplier implements PSupplier<int[]> {
@Override
public int[] supply() {
return new int[]{1,2,3,4,5,6,7};
}
}
請記住,generics 只接受對象,並且,除非在 java 中,否則數組是 object,它的類型是否正確並不重要,PSupplier 類型是否正確,所以, [int] . 或者您可以使用PSupplier<Integer[]>並且也是正確的,因為 Integer 是 int 數據類型的包裝 class 。 如果您不了解 java 中的包裝類,我建議您閱讀: java 中的包裝類
對於方法polymorphsSuppliers()必須返回一個PSupplier數組,例如:
** here, the polymorphism is working **
PSupplier[] polymorphsSuppliers(){
return new PSupplier[]
{
new IarrSupplier(),
new LarrSupplier(),
new DarrSupplier(),
......
};
}
關於你在 for 循環中的代碼,我不明白你到底想做什么。 但我希望我輸入的示例對您有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.