Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取与另一个类具有相同泛型类型的类_Java - Fatal编程技术网

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&

这是我在这里的第一个问题,所以感谢每个人谁使这个论坛的生活

我希望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;
    }

}
包实用程序;
导入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]);