Java 获取与另一个类具有相同泛型类型的类
这是我在这里的第一个问题,所以感谢每个人谁使这个论坛的生活 我希望Image2D类具有与Point2D类相同的泛型类型 Image2D.java:Java 获取与另一个类具有相同泛型类型的类,java,Java,这是我在这里的第一个问题,所以感谢每个人谁使这个论坛的生活 我希望Image2D类具有与Point2D类相同的泛型类型 Image2D.java: package utilities; import ij.ImagePlus; import utilities.Point2D; public class Image2D<T> { ArrayList<Point2D<T>> original = new ArrayList<Point2D&
package utilities;
import ij.ImagePlus;
import utilities.Point2D;
public class Image2D<T> {
ArrayList<Point2D<T>> original = new ArrayList<Point2D<T>>();
public Image2D(ImagePlus imp) {
// imp.getProcessor().getIntArray() returns a int[][]
this.original = matrixToImage2D(imp.getProcessor().getIntArray());
}
private static <T> ArrayList<Point2D<T>> matrixToImage2D(T[][] matrix) {
ArrayList<Point2D<T>> img = new ArrayList<Point2D<T>>();
for (int row=0; row<matrix.length; row++) {
for (int col=0; col<matrix[row].length; col++) {
img.add(new Point2D(col, row, matrix[row][col]));
}
}
return img;
}
}
包实用程序;
导入ij.ImagePlus;
导入utilities.Point2D;
公共类Image2D{
ArrayList original=新的ArrayList();
公共图像2D(ImagePlus imp){
//imp.getProcessor().getIntArray()返回一个int[][]
this.original=matrixToImage2D(imp.getProcessor().getIntArray());
}
私有静态ArrayList矩阵xToImage2D(T[][]矩阵){
ArrayList img=新的ArrayList();
对于(int row=0;row我怀疑您已经知道问题所在-您已经添加了一条注释,对其进行了总结
// imp.getProcessor().getIntArray() returns a int[][]
matrixToImage
方法需要一个T[][]
,但是您给它一个int[][][]
,这将不起作用
您必须使ImagePlus
获取一个通用参数(ImagePlus
),然后使getIntArray
返回一个T[][]
,或者必须使matrixToImage2D
获取一个int[][]
作为参数
另一种选择是使用T extends Number
,并使适配器方法在int[][]]
和T[][]
之间进行转换。我怀疑您已经知道问题出在哪里了-您添加了一条注释对其进行了总结
// imp.getProcessor().getIntArray() returns a int[][]
matrixToImage
方法需要一个T[][]
,但是您给它一个int[][][]
,这将不起作用
您必须使ImagePlus
获取一个通用参数(ImagePlus
),然后使getIntArray
返回一个T[][]
,或者必须使matrixToImage2D
获取一个int[][]
作为参数
另一种选择是使用T扩展数字
,并使适配器方法在int[][]
和T[][]之间转换
我不确定我是否可以遵循?您可以在实例化时定义泛型类型,这意味着您可以完全控制所使用的类型?否则,您可以始终让泛型类型扩展另一个类型,以限制最终用户的选择(例如,img.add(new Point2D(col,row,matrix[row][col col 2]);
将生成未选中的类型警告。您应该做的是为Point2D
的实例化提供一个类型参数,如下所示:img.add(new Point2D(col,row,matrix[row][col]))
我不确定我是否能理解?您在实例化时定义泛型类型,这意味着您可以完全控制所使用的类型?否则,您可以始终让泛型类型扩展另一个类型,以限制最终用户的选择(例如,行img.add(新点2D(列,行,矩阵[行][col]));
将生成未选中的类型警告。您应该做的是为Point2D
的实例化提供一个类型参数,如下所示:img.add(new Point2D(col,row,matrix[row][col]))
我不确定我是否能理解?您在实例化时定义泛型类型,这意味着您可以完全控制所使用的类型?否则,您可以始终让泛型类型扩展另一个类型,以限制最终用户的选择(例如,行img.add(新点2D(列,行,矩阵[行][col]));
将生成未选中的类型警告。您应该做的是为Point2D
的实例化提供一个类型参数,如下所示:img.add(新的Point2D(col,row,matrix[row][col]);