在 Java 中向 ArrayList 添加属性<Object>



我有一个名为Preferences的类。如何将对象推入此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
}
]

您似乎需要

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

它必须包含不同的类型。

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

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

相关内容

最新更新