Вам, кажется, нужно
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;
}