Published 19 Sep, 2022

Java - How to create a class dynamically in java

Category Java
Modified : Oct 03, 2022
88

I don't know if this is even possible. Anyway, here is my problem: I want to create a Class having a database table schema, for example suppose that I have a table like

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

and let's assume I can query this data from my db. What I want to do is to dynamically create (and, of course, instantiate) a Java class that should look like this:

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

(actually an ActiveRecord for my table)

Can you help me starting this? Tnks

Answers

There are 4 suggested solutions here and each one has been listed below with a detailed description. The following topics have been covered briefly such as Java, Reflection, Activerecord. These have been categorized in sections for a clear and precise explanation.

17

What would you do with a dynamically created and instantiated class that none of your other code knows about?

For a stically typed language like Java, it makes little sense to have such classes. On the other hand, most OR Mappers like Hibernate come with tools that allow you to statically generate classes from a database schema.


51

I think what you want is the facility provided by java.lang.reflect.Proxy and related classes.


44

The Article about the "new" Compiler API and the java doc for JavaCompiler show a way on how to compile java source from String objects. (I don't know if we can compile to output streams and load the class files in memory yet...)

You can load the class files later on with a URLClassLoader and create instances (reclection/invocation API)


35

Technically, you can, via a bytecode manipulation library - CGLIB, javassist, asm, bcel and the likes.

However, this is not the Java "philosophy". Java is statically-typed, so you'd better create the classes before runtime.

Take a look at hibernate / eclipseLink for Java ORM - a way of mapping tables to objects.