Как вы сериализуете атрибуты в Java? - PullRequest
1 голос
/ 03 февраля 2012

Я пишу Java-приложение и у меня есть несколько Java-бинов (студент, курс, комната и т. Д.);каждый боб имеет от 15 до 30 полей.Графический интерфейс должен давать возможность просматривать, вставлять или редактировать каждый компонент.Кроме того, у меня есть таблицы, которые показывают список пользователей или курсов и т. Д.

Есть ли хороший способ сериализации атрибутов таким образом, что мне не нужно создавать метку и текстовое поле для вставки каждого атрибутадля каждого компонента, но форма генерируется автоматически?

На данный момент я использовал это решение:

public class User {
    public enum UserAttributes{
        FirstName (0),
        LastName (1),
        Address (2);

        int index;

        private UserAttributes( int index ) {
            this.index = index;
        }

        public int getIndex() {
            return index;
        }
    }

    private int numberOfAttributes = UserAttributes.values().length;
    private String [] attributes = new String[ numberOfAttributes ];

    public void set( UserAttribute a, String value ) {
        attribute[ a.getIndex() ] = val;
    }

    public String get( UserAttribute a ) {
        return attribute[ a.getIndex ];
    }

}

Это работает, но разрушает объектно-ориентированную парадигму и диаграмму классов.Вы не можете видеть структуру класса.Как вы думаете, это элегантное решение или может быть лучше?

спасибо

1 Ответ

0 голосов
/ 03 февраля 2012

Это не сериализация, которую вы хотите. Вот некоторый код:

import java.text.Format;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public final class LearninFormatten
{
    enum ValueType
    {
        FirstName("First Name: ", null),
        LastName("Last Name: ", null),
        DateOfBirth("Date Of Birth: ", new SimpleDateFormat("dd-MMM-yyyy"));

        private Format formatter; // Format definition of this field.
        private String label; // Label for this value in the gui.

        private ValueType(final String label, final Format formatter)
        {
            this.formatter = formatter;
            this.label = label;
        }

        /**
         * @return The formatter or null.
         * null indicates no formatting of the value.
         */
        public Format getFormatter()
        {
            return formatter;
        }

        public String getLabel()
        {
            return label;
        }
    }

    final class Value
    {
        private ValueType valueType;
        private Object value;

        public Value(final ValueType valueType, final Object value)
        {
            this.valueType = valueType;
            this.value = value;
        }

        public ValueType getValueType()
        {
            return valueType;
        }

        public Object getValue()
        {
            return value;
        }
    }

    public static void main(String[] args)
    {
        Calendar calendar = Calendar.getInstance();
        LearninFormatten learninFormatten = new LearninFormatten();
        Value[] someValues = new Value[3];

        calendar.clear();
        calendar.set(Calendar.YEAR, 2011);
        calendar.set(Calendar.MONTH, 7);
        calendar.set(Calendar.DAY_OF_MONTH, 27);

        someValues[0] = learninFormatten.new Value(ValueType.FirstName, "Cornelius");
        someValues[1] = learninFormatten.new Value(ValueType.LastName, "Snarlington");
        someValues[2] = learninFormatten.new Value(ValueType.DateOfBirth, calendar.getTime());

        learninFormatten.printValues(someValues);
    }

    private void printValues(Value[] valueArray)
    {
        for (Value current : valueArray)
        {
            Format formatter;
            String label;
            Object value = current.getValue();
            ValueType valueType = current.getValueType();

            formatter = valueType.getFormatter();
            label = valueType.getLabel();

            System.out.print(label);
            if (formatter != null)
            {
                System.out.println(formatter.format(value));
            }
            else
            {
                System.out.println(value.toString());
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...