[英]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.