2013-06-03 4 views
2

Я ищу способ хранения дополнительных метаданных для экземпляров массива. Я смог реализовать это для стандартных объектов, используя методы инъекции байт-кода, чтобы вставить дополнительное поле String непосредственно в двоичные файлы файлов классов.Добавление метаданных в массивные экземпляры

Однако для того, чтобы эта стратегия работала, файл .class должен быть доступен для модификации; Классы массивов в java не имеют соответствующего .class-файла и, следовательно, не могут быть использованы в этой усадьбе. Есть ли другой способ осуществления этого?

Я бы предпочел реализовать это в java, не приводя к изменению файлов JVM C++. Помимо дополнительного уровня сложности, это, несомненно, добавило бы проект, и этот маршрут почти наверняка нарушил бы значительную мобильность, обеспечиваемую платформой.

+0

Вы хотите добавить общий инструментарий для всех экземпляров типов массива? Скорее всего, это невозможно. –

+0

Да, я хотел бы добавить одно дополнительное поле ко всем экземплярам массива. Поскольку класс Array загружен относительно рано в жизненном цикле JVM, класс, очевидно, должен быть статически инструментализован и предварительно привязан к пути класса загрузки. –

+0

@ kuporific да есть в пути увидеть мой ответ Гийому Дармонту. –

ответ

1

Возможно, вы можете взглянуть на WeakHashMap.

Чтобы соответствовать контракту с картой, вам необходимо определить класс-оболочку для своих массивов, который переопределит методы equals и hashcode. Затем вы определяете объект метаданных для обработки ваших настраиваемых свойств.

Прототип будет:

WeakHashMap<ArrayWrapper,MetaData> map; 
map.put(new ArrayWrapper(primitiveArray), new MetaData("string1",...)); 
+0

Возможно, этот тип решения может понадобиться. Я создаю платформу, которая присоединяется к процессу JVM, а затем переходит к перехвату/запросам инструмента для доступа к памяти. Теперь все это должно быть прозрачно для разработчика приложений. Представляя новые экземпляры обертки в графе объектов, это делает немного сложнее выполнить, но не невозможно. Итак, чтобы быть понятным, вы думаете, что нет возможности хранить дополнительные данные непосредственно в классе массива? –

+0

Да, в настоящее время я не вижу другого выбора. –

Смежные вопросы