2015-06-04 25 views
1

這是我的第一個問題,所以感謝大家誰使這個論壇生活。得到一個類具有相同的另一類的通用類型

我希望我的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

行'img.add(new Point2D(col,row,矩陣[行] [COL]));'會產生一個未經檢查的類型警告。你應該做的是爲你的'Point2D'實例化提供一個類型參數,如下所示:'img.add(new Point2D (col,row,matrix [row] [col]));' – Oli

回答

0

我懷疑你已經知道問題所在 - 你已經添加了一個評論總結。

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

matrixToImage方法需要T[][]但你給它一個int[][]這是行不通的。

您必須要麼使ImagePlus採取泛型參數(ImagePlus<T>),然後進行getIntArray回報T[][]或者你必須matrixToImage2D採取int[][]作爲參數。

另一種替代方法是使用T extends Number並製作在int[][]T[][]之間轉換的適配器方法。

相關問題