Я потратил пару дней на это, и, к сожалению, я не могу найти ответ на этот вопрос, который не является ни 1. Не применимо к моему использованию, или 2. Требовать большой объем знаний эта тема уже Так вот мой вопрос: в Java, некоторые записи, как классы (например, ArrayList) может быть установлен типом при создании нового экземпляра из них:Java - создать класс экземпляра типа?
ArrayList<Integer> list = new ArrayList<Integer>();
Так что мой вопрос , как вы это делаете для своего класса? Я читал немного в ArrayList класс библиотеки, и я заметил, что они используют
<E>
Я думаю, что я помню, это означает элемент, но я мог бы сделать материал.
У меня есть класс с именем сеть (для создания сетки и всех операций сетки для моих карт и прочего)
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>();
а потом, что изменить тип данных некоторых из методов возврата и переменных (например, двойных [] [] значений в строку [] [] значение)
Так как я бы переписать свой код для «значений» переменная должна быть любой из них? Я бы просто сделал его «частным объектом [] []» вместо этого? И как я могу проверить, какой тип данных? И, конечно, мои операции (плюс метод clear() »зависят от типа данных, поэтому как бы я мог проверить, что это такое (например, установить clear() для установки значений в 0, если int, но «", если String, или иметь метод «toArray()» из Integer, Float, String, Char или Double?
Я понятия не имею, как эти элементы или типы работают сейчас, я хотел бы изучить его довольно быстро, поэтому, пожалуйста, ответьте на полные куски кода и его описания!
EDIT: У меня была небольшая, вероятно, глупая идея. Я бы инициализировал вещи как объекты, а затем отбросил их на работу 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) Дженерики не являются ответом, если у вас есть методы, связанные с конкретным типом (например, если тип double, выполните расчет. type - строка, найдите подстроку). Они предназначены для классов, которые должны иметь одинаковые операции для всех разрешенных типов. (2) Дженерики и массивы не идут хорошо вместе. (3) В основном нет способа проверить, что такое базовый тип общего класса. – RealSkeptic
Я понял, что у меня была проблема. Теперь, когда я знал, что это называется Generics, мне удалось заставить все работать. Что заставляет вас говорить, что Generics and Arrays не сочетаются вместе? –
См. Http://stackoverflow.com/q/1817524/4125191, например. – RealSkeptic