Java - 创建类型的实例类?

时间:2015-10-10 16:17:21

标签: java types grid record

我花了几天时间研究这个问题,不幸的是,我找不到这个问题的答案 1.不适用于我的用法,或 2.已经要求对该主题有大量的了解 所以这是我的问题: 在Java中,某些类似记录的类(如ArrayList)可以在创建它们的新实例时设置为类型:

ArrayList<Integer> list = new ArrayList<Integer>();

所以我的问题是,你怎么为你的班级做到这一点?我已经阅读了相当多的ArrayList库类,我注意到他们使用

<E>

我想我记得它意味着元素,但我可以制作东西。

我有一个名为Grid的类(用于网格创建和我的地图和东西的所有网格操作)

public class Grid {
    private int sizeX;
    private int sizeY;
    private double[][] values;

    public Grid(){
        this.sizeX = 10;
        this.sizeY = 10;
        this.values = new double[this.sizeX][this.sizeY];
        this.clear();
    }

    public Grid(int width, int height){
        this.values = new double[width][height];
        this.sizeX = width;
        this.sizeY = height;
    }

    public Grid(Grid sample){
        this.values = sample.toArray();
        this.sizeX = sample.sizeX;
        this.sizeY = sample.sizeY;
    }

    public int getSizeX(){
        return this.sizeX;
    }

    public int getSizeY(){
        return this.sizeY;
    }

    public Grid copy(){
        return new Grid(this);
    }

    public double[][] toArray(){
        return this.values.clone();
    }

    public void clear(){
        for(int rows=0; rows<this.sizeY; rows++){
            for(int cols=0; cols>this.sizeX; cols++){
                this.values[cols][rows] = 0;
            }
        }
    }

    public boolean isSquare(){
        return (this.values.length == this.values[0].length);
    }

    /*---------------------- Grid Operations Begin Here ----------------------*/


}

我跳过了网格操作,因为在这种情况下我觉得它们并不重要。现在,我要创建一个新的网格

Grid map = new Grid();

它创造了一个双打网格。但我不想这样做 - 我希望能够创建一个整数,浮点数,双精度,字符或字符串的网格,我希望能够形成:

Grid<Double> map = new Grid<Double>();
or
Grid<String> map = new Grid<String>();

然后为此将一些返回方法和变量的数据类型(如double [] []值更改为string [] [] values)

那么我如何将“values”变量的代码重写为其中任何一个?我会把它变成“私人对象[] []”吗?然后我将如何检查它是什么数据类型?当然,我的操作(加上“clear()”方法)取决于数据类型,所以我如何检查它是什么(例如,设置clear()以将值设置为0,如果是int,但是“”如果是String,或者方法“toArray()”是Integer,Float,String,Char还是Double?

我不知道这些元素或类型现在是如何工作的,我想快速学习它,所以请回复完整的代码块和描述!

编辑:我有一个轻微的,可能是愚蠢的想法。将对象初始化为Objects然后将它们转换为E工作?例如:

public class Grid<E>{
    private Object[][] values;

    public Grid(){
        this.sizeX = 10;
        this.sizeY = 10;
        this.values = new Object[this.sizeX][this.sizeY];
        this.clear();
    }

    public E toArray(){
        return (E[][]) this.values.clone();
    }

    public E get(int x, int y){
         return (E) values[x][y];
    }

    public void set(int x, int y, E value){
        this.values[x][y] = value;
    }
}

如果上述工作/几乎可以工作,你能否告诉我我可以遇到的任何问题?如果没有,请忽略它并回答原始问题:D

1 个答案:

答案 0 :(得分:0)

泛型Java教程更好地解释了答案。请参阅https://docs.oracle.com/javase/tutorial/java/generics/index.html

基本上,你会开始:

public class Grid<E> {
    private int sizeX;
    private int sizeY;
    private E[][] values;

将'double'替换为'E',无论它出现在哪里。