Подтвердить что ты не робот

Как создать класс динамически в java

Я не знаю, возможно ли это. Во всяком случае, вот моя проблема: Я хочу создать класс, имеющий схему таблицы базы данных, например, предположим, что у меня есть таблица типа

id - unsigned int 
username - varchar(128)
password - varchar(128)

и предположим, что я могу запросить эти данные из моего db. Я хочу сделать динамическое создание (и, конечно же, создание экземпляра) класса Java, который должен выглядеть следующим образом:

public class User{
    private unsigned int id;
    private String username;
    private String password;
}

(на самом деле a ActiveRecord для моей таблицы)

Можете ли вы помочь мне начать это? Tnks

4b9b3361

Ответ 1

Что бы вы сделали с динамически созданным и созданным экземпляром класса, о котором не знает ни один ваш другой код?

Для жестко типизированного языка, такого как Java, нет смысла иметь такие классы. С другой стороны, большинство OR Mappers, таких как Hibernate, имеют инструменты, которые позволяют статически генерировать классы из схемы базы данных.

Ответ 2

Технически вы можете, используя библиотеку манипуляции байт-кода - CGLIB, javassist, asm, bcel и т.д.

Однако это не философия Java. Java статически типизирован, поэтому вам лучше создавать классы перед выполнением.

Взгляните на hibernate/eclipseLink для Java ORM - способ сопоставления таблицы к объектам.

Ответ 3

Я думаю, что вы хотите, это средство, предоставляемое java.lang.reflect.Proxy и связанными с ним классами.

Ответ 4

Это - хорошая статья для начала, но вы уверены, что вам нужно создать новый класс? Может быть, вы можете просто использовать карту?

Ответ 5

Подобно состояниям @Bozho, Java является статически типизированным языком, для которого генерация классов во время выполнения может привести только к хаосу.

В нашем мире гораздо удобнее создавать классы во время сборки, что можно сказать при компиляции. Как правило, используя Hibernate reverse engineering, вы можете построить свои классы Java из схемы БД во время сборки и развернуть эти классы в своем приложении, которые дают вы аутентичный код Java для чтения, с гарантией, что ваш код будет привязан к вашей схеме DB

Ответ 6

Статья о "новом" API компилятора и java doc для JavaCompiler показывают способ компиляции источника java из объектов String. (Я не знаю, можем ли мы скомпилировать выходные потоки и загружать файлы классов в памяти...)

Вы можете загружать файлы классов позже с помощью URLClassLoader и создавать экземпляры (API перезаписи/вызова)

Ответ 7

Да, его возможность компилировать классы во время выполнения. Я уже делал это раньше в исследовании генетических алгоритмов. Его можно использовать встроенный интерфейс для компилятора. В статье на Java World описывается базовый подход: http://www.javaworld.com/javaworld/jw-06-2006/jw-0612-dynamic.html?page=3

Ответ 8

Вы можете создать исходный текст Java и использовать пакет javax.tools для его компиляции и загрузчик классов для его загрузки. Googling дает некоторые примеры того, как это можно сделать, но я никогда не пробовал ничего подобного, поэтому я не знаю, с какими проблемами вы столкнетесь. Очевидно, что Java не был предназначен для таких целей.

Ответ 9

Я предполагаю, что конечная цель - иметь код, похожий на ActiveRecord, для записи доступа к БД. Если это так, вы можете взглянуть на реализацию Java ActiveRecord: http://code.google.com/p/activejdbc/

веселит,

игорь