You could create a class that represents a column, and then represent a row as a list of columns:
public class Column {
private String name;
private Class clazz;
private Object value;
public Column(String name, Class clazz, Object value) {
this.name = name;
this.clazz = clazz;
this.value = value;
}
// ...
}
Your data would then be:
List<Column> row = new ArrayList<Column>();
row.add(new Column("Name", String.class, "Oskar"));
row.add(new Column("Age", Integer.class, 28));
row.add(new Column("weight", Double.class, 75.5));
row.add(new Column("weightUnit", String.class, "kilogram"));
However, it looks like you're trying to create a database, so you might want to have a Table class which would have a List<ColumnDescriptor>, where ColumnDescriptor would be like the above Column class, only without the value -- just the name and type. And then perhaps have a TableRow class that would have a List<Object> of all the values. When you add a row to a table, you would want to validate that the values are compatible with the types of the columns of that table.
You might want to look at the way JDBC is designed for inspiration. Supporting all the needed generality, functionality, and making it all type-safe is a lot of work. Unless you really need this for an ORM tool, custom reporting solution, or an actual database, you might want to rethink the design and ask if this much generality is necessary. ("Do the simplest thing that could possibly work.")