Добавить свойства в ArrayList <Object>в Java - PullRequest
0 голосов
/ 02 ноября 2018

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

package example;

import java.util.ArrayList;

public class Preferences {
    public Preferences() {
        super();
    }

    ArrayList<Object> preferences;

    public void setPreferences(ArrayList<Object> preferences) {
        this.preferences= preferences;
    }

    public ArrayList<Object> getPreferences() {
        return preferences;
    }
}

В моем основном методе я делаю это:

package example;

public class Runner {
    public Runner() {
        super();

        Preferences preferences = new Preferences();

    }

    public static void main(String[] args) {
        Runner runner = new Runner();
    }
}

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

[
   {
       preferenceName: "Default Date",
       preferenceValue: "05/07/2020"
   },
   {
       preferenceName: "Default Number",
       preferenceValue: 55
   },
   {
       preferenceName: "goToHomePage",
       preferenceValue: true
   }
]

1 Ответ

0 голосов
/ 02 ноября 2018

Вам, кажется, нужно

public class User {
    private final String userName;
    public User(String userName) {
        this.userName = userName;
    }

    public String getUserName() {
        return userName;
    }
}

public class Runner {
    final List<User> users = new ArrayList<>();

    public Runner() {
        users.add(new User("User 1"));
        users.add(new User("User 2"));
    }

    public static void main(String[] args) {
        Runner runner = new Runner();
    }
}

Он должен содержать разные типы.

Если у вас есть запись пользователя, но вы не знаете, какими могут быть атрибуты или их значения, вы можете использовать карту.

public class User {
    private final Map<String, Object> attributes;
    public User(Map<String, Object> attributes) {
        this.attributes= attributes;
    }
    public User(String key, Object value, Object... keysAndValues) {
        this(new LinkedHashMap<>());
        attributes.put(key, value);
        for (int i = 0; i < keysAndValues.length; i += 2)
            attributes.put((String) keysAndValues[i], keysAndValues[i+1]);
    }

    public Map<String, Object>getAttributes() {
        return attributes;
    }
}

public class Runner {
    final List<User> users = new ArrayList<>();

    public Runner() {
        users.add(new User("userName", "User 1", "favouriteNumber", 7));
        users.add(new User("userName", "User 2", "colour", Color.BLUE));
    }

    public static void main(String[] args) {
        Runner runner = new Runner();
    }
}

Здесь я предполагаю, что ваши имена атрибутов имеют строковый тип. Например, если вы используете YAML, он может иметь любой тип в качестве атрибута, поэтому вы можете просто использовать Object

{ preferenceName: 'Default Date', preferenceValue: '05/07/2020' }, 
{ preferenceName: 'Default Number', preferenceValue: 55 }, 
{ preferenceName: 'goToHomepage', preferenceValue: true }

Я бы структурировал это как

new User("Default Date", LocalDate.parse("05/07/2020", DateTimeFormatter.ofPattern("dd/MM/yyyy")),
         "Default Number", 55,
         "goToHomepage", true);

Однако в идеале вы бы заранее знали, какие возможные атрибуты, и использовали бы пользователя, который выглядит как

class User {
    LocalDate defaultDate;
    long defaultNumber;
    boolean goToHomepage;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...