Я пытаюсь создать онлайн-арену, в которой игроки могут создавать собственные арены. Я хочу сохранить настройки арены в базе данных MySQL, чтобы сохранить арену для дальнейшей игры.Из общего класса менеджера, как получить доступ к статическим данным о его экземплярах?
Улов есть, есть различные варианты Arenas. Таким образом, могут быть арены для джунглей, пустынные и т. Д. Все эти различные варианты (подклассы абстрактного класса Arena) должны храниться в разных таблицах, поскольку переменные (и, следовательно, столбцы) различаются для каждого типа арен.
Мой вопрос: из описанного ниже класса менеджера, содержащего массив общего типа, как я могу получить требуемые столбцы из класса child (T) и его родителя. Я использую общий тип, потому что я также хочу использовать этот класс для управления информацией игрока (которая также должна быть сохранена в базе данных) позже.
Вот класс-менеджер:
public class Manager<T extends Savable> {
private Connection connection;
private List<Column<?>> columns;
private List<T> instances;
public Manager() {
fillColumnArray()
try {
connection = getSQLConnection();
Statement s = connection.createStatement();
s.executeUpdate(getCreateQuery())
s.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public void fillColumnArray() {
// Somehow, manages to get the needed columns from
// the parent class and the child class
}
public Connection getSQLConnection() {
// Creates a mysql connection to a database
// from parameters on a local file and returns it
}
public String getCreateQuery() {
// Creates the query from the previously found columns
}
/* */
}
Вот класс Column используется в менеджере:
public class Column<U> {
private String name;
private U defaultValue;
/* */
}
И здесь возможны переменные класса Arena и один из возможных детей
public abstract class Arena implements Savable {
private Vector centerPosition;
private int radius;
private int gameLenght;
/* */
}
public class JungleArena extends Arena {
private int treeHeight;
private boolean daytime;
/* */
}
Я думал о многих разных возможностях. Один из них заключался в том, чтобы добавить метод queryColumns() в интерфейс Savable, но этот параметр не работает, поскольку при создании Менеджера я могу получить доступ к классу T статическим способом.
Итак, я подумал о добавлении статического метода requestColumns() внутри дочернего элемента и родителя, но поскольку я использую общий тип, компилятор не понимает, откуда приходит этот метод.
Тогда я подумал о том, чтобы отличить тип T к его специфическому типу Arena, но тогда он не будет работать дальше в моем проекте при использовании того же класса для хранения игроков.
Надеюсь, что это достаточно ясно.
Есть ли у кого-нибудь идеи сделать что-то работу или просто другим способом сделать что-то из вашего понимания?
Благодаря
Просто, чтобы быть уверенным, что вы задаетесь вопросом, как сказать менеджеру, что таблица, чтобы сохранить значения в соответствии с классом «Арены»? – MikaelF
Ну, я хочу сказать менеджеру, какие значения будут в таблице –
Можете ли вы использовать оператор instanceof для проверки того, что такое класс? – MikaelF