我花了几天时间研究这个问题,不幸的是,我找不到这个问题的答案 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
答案 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',无论它出现在哪里。