这是我在这里的第一个问题,感谢所有让这个论坛生活的人。
我希望我的Image2D类具有与Point2D类相同的泛型类型。
Image2D.java:
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;
}
}
Point2D.java:
package utilities;
public class Point2D<T> {
public int x;
public int y;
public T value;
public Point2D(int col, int row, T value) {
this.x = col;
this.y = row;
this.value = value;
}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
public T getValue() {
return this.value;
}
}
我不能用好的概念来做到这一点,我只是把代码用来说明我的想法。 请有人能告诉我我必须使用的java概念吗?
感谢。
答案 0 :(得分:0)
我怀疑你已经知道问题出在哪里 - 你已经添加了一个总结它的评论。
// imp.getProcessor().getIntArray() returns a int[][]
matrixToImage
方法需要T[][]
,但您提供的int[][]
无效。
您必须让ImagePlus
获取通用参数(ImagePlus<T>
),然后让getIntArray
返回T[][]
,或者您必须matrixToImage2D
获取int[][]
{1}}作为参数。
另一种替代方法是使用T extends Number
并制作在int[][]
和T[][]
之间转换的适配器方法。