获得具有相同泛型类型的另一个类的类

时间:2015-06-04 08:16:34

标签: java

这是我在这里的第一个问题,感谢所有让这个论坛生活的人。

我希望我的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概念吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我怀疑你已经知道问题出在哪里 - 你已经添加了一个总结它的评论。

// imp.getProcessor().getIntArray() returns a int[][]

matrixToImage方法需要T[][],但您提供的int[][]无效。

您必须让ImagePlus获取通用参数(ImagePlus<T>),然后让getIntArray返回T[][],或者您必须matrixToImage2D获取int[][] {1}}作为参数。

另一种替代方法是使用T extends Number并制作在int[][]T[][]之间转换的适配器方法。