реализация Java (список с различными типами данных) - PullRequest
1 голос
/ 05 октября 2011

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

Name - "Oskar",
Age - 28,
weight - 75.5,
weightUnit - "kilogram",
...

Поскольку содержимое списка должно быть гибким, я не могу использовать переменные члена класса.По сути, программист слеп к контенту.Но потом, в какой-то момент - я должен извлечь все записи с двойными значениями.Как бы вы реализовали что-то подобное?

Ответы [ 3 ]

3 голосов
/ 05 октября 2011

Инкапсулируйте информацию в объекте, а затем получите список упомянутых объектов.Например,

public final class TableRow{
    private final String name;
    private final int age;
    private final double weight;
    private final String weightUnit;

    public TableRow(String name, int age, double weight, String weightUnit){
        ...
    }

    // include accessors
}

И тогда объявление списка в другом классе будет выглядеть так:

List<TableRow> list = new ArrayList<TableRow>();
1 голос
/ 05 октября 2011

Вы можете создать класс, который представляет столбец, а затем представить строку в виде списка столбцов:

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;
    }

    // ...
}

Тогда ваши данные будут:

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"));

Тем не менее, похоже, что вы пытаетесь создать базу данных, поэтому вы можете захотеть иметь класс Table, который будет иметь List<ColumnDescriptor>, где ColumnDescriptor будет похоже на вышеуказанный класс Column, только без значения - только имя и тип. И тогда, возможно, есть класс TableRow, который будет иметь List<Object> всех значений. Когда вы добавляете строку в таблицу, вы хотите проверить, что значения совместимы с типами столбцов этой таблицы.

Возможно, вы захотите взглянуть на то, как JDBC создан для вдохновения. Поддержка всей необходимой общности, функциональности и обеспечение безопасности всех типов - это большая работа. Если вам действительно не нужно это для инструмента ORM, настраиваемого решения для создания отчетов или реальной базы данных, вы можете переосмыслить дизайн и спросить, нужна ли такая универсальность. («Делай самое простое, что могло бы сработать».)

0 голосов
/ 05 октября 2011

Вы можете использовать HashMap

 Map<String, String> m = new HashMap<String, String>();
...