在Java中将属性添加到ArrayList <object>

时间:2018-11-02 09:58:03

标签: java json object

我有一个叫做“首选项”的类。如何将对象推入此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 :(得分:2)

您似乎需要

Dim indexx As Integer = 0
Dim lines() As String = System.IO.File.ReadAllLines(FILE_NAME)
Dim numOfChars As Integer

While indexx < RichTxtOut.Text.LastIndexOf("'")
    numOfChars = 0

    RichTxtOut.Find("'", indexx, RichTxtOut.TextLength, RichTextBoxFinds.None)

    'count the number of characters after the apostrophe
    For li As Integer = 0 To Lines(RichTxtOut.GetLineFromCharIndex(RichTxtOut.Find("'", indexx, RichTxtOut.TextLength, RichTextBoxFinds.None))).Count - 1
        numOfChars += 1
    Next

    RichTxtOut.Select(RichTxtOut.Find("'", indexx, RichTxtOut.TextLength, RichTextBoxFinds.None), numOfChars)

    RichTxtOut.SelectionColor = Color.Green
    numOfChars = 0
    indexx = RichTxtOut.Text.IndexOf("'", indexx) + 1
End While
  

它必须容纳不同的类型。

如果您有用户记录,但不知道属性或值可能是什么,则可以使用地图。

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

在这里,我假设您的属性名称是String类型。例如,如果您使用YAML,则它可以具有任何类型的属性,因此您可以只使用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(); } }

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