Я работаю с Java 1.3, поэтому он не поддерживает дженерики.Я придумал теневую работу вокруг.Я хочу знать, если объекты Integer и Double имеют ненужные накладные расходы;Я думаю, что я спрашиваю: занимают ли целые числа столько же места, сколько int?Тот же вопрос для Double и doubles.
Из того, что я знаю, массив Objects содержит массив 32-битных целых чисел, которые фактически хранят адрес объекта в памяти независимо от массива.Но когда я явно создаю массив примитивов, как я сделал здесь, результат будет плохим.Потому что, AFAIK, массив примитивов фактически является массивом данных, а не указателями на данные.Или я просто слишком много думаю о C ++?
Итак, если массив в DataPackage на самом деле содержит указатели вместо примитивов, я готов.Но если они сами хранят примитивы, доступ к данным будет проблемой, поскольку double - это 64 бита данных, но указатель на это все еще 32 бита.
/**
*
*
* @todo Comment all the code.
* @author Davidthefat
* @version 1.0
*/
public class DataPackage {
private String dataType;
private Object data;
/**
*
* @param type
* @param numOfItems
*/
public DataPackage(String type, int numOfItems) {
dataType = type;
if (type.equals("Wheels")) {
data = new int[numOfItems * 2];
}
if (type.equals("Arms")) {
data = new int[numOfItems * 1];
}
if (type.equals("Joysticks")) {
data = new double[numOfItems * 2];
}
if (type.equals("Buttons")) {
data = new boolean[numOfItems * 4];
}
}
/**
*
* @param t1
*/
public void update(Object t1) {
data = t1;
}
/**
*
* @return
*/
public Object getData() {
return data;
}
/**
*
* @return
*/
public String toString() {
return "This contains " + dataType;
}
}
Чтобы получить доступ к этим данным, я приведу массив объектов в виде массива целых чисел, затем вызову функцию intValue (): temp - это массив целых чисел.Я также должен указать, что getData во входных данных просто возвращает DataPackage.
temp[0] = ((Integer[])input.getData("Wheels").getData())[0].intValue();
Я не могу просто запустить этот код прямо сейчас, так как он предназначен для робота FRC в моей школе, а школы нет.