gpt4 book ai didi

java - 内联创建自定义对象列表,无需单独的模型类 - java

转载 作者:行者123 更新时间:2023-12-03 17:10:15 26 4
gpt4 key购买 nike

为了保持代码最少,我希望能够在 java 中创建自定义对象的列表。类似于我们在 C# 中所做的或 Swift ,在我们以这种方式定义列表的构造函数或参数的地方,我们不必为列表创建单独的对象和构造函数。
例如

    var menuList: [(category: String, name: String, ismulti: Bool)] = [
(category: "Categ1", name: "name1", ismulti: true),
(category: "Categ2", name: "name2", ismulti: false),
(category: "Categ3", name: "name3", type: ismulti: true),
]
这里 var menuList: [(category: String, name: String, ismulti: Bool)]减少了对对象和构造函数的需求。 java中有没有类似的东西?
与我在 Java 中所做的相同。
public class Menu{
String category;
String name;
boolean isMulti;

public Menu(String category, String name, boolean isMulti) {
this.category = category;
this.name = name;
this.isMulti = isMulti;
}

public List<Menu> menuList = new ArrayList<Menu>() {{
add(new Menu("categ1","name1",true));
add(new Menu("categ2","name2",true));
add(new Menu("categ3","name3",true));

}};
}

最佳答案

只是添加第三个解决方法(正如其他答案所指出的,您不能在 Java 中执行此操作 - 没有这样的语法)。
您可以做的一件事是创建自己的可重用 Tuple类(class)。您将被迫为每个元素数量创建一个类,但您可以将其与各种类型组合重用。

static class Tuple3<T, U, V> {
final T _1;
final U _2;
final V _3;

private Tuple3(T t, U u, V v) {
this._1 = t;
this._2 = u;
this._3 = v;
}

public static <T, U, V> Tuple3<T, U, V> of(T t, U u, V v) {
return new Tuple3<>(t, u, v);
}
}
然后(使用相同的元组类,您可以有不同的口味):
//menuList is a List<Tuple3<String, String, Boolean>>
var menuList = List.of(
Tuple3.of("Categ1", "name1", true),
Tuple3.of("Categ2", "name2", false),
Tuple3.of("Categ3", "name3", true)
);

//registration is a List<Tuple3<String, LocalDate, Double>>
var registrationData = List.of(
Tuple3.of("John", LocalDate.EPOCH, 1.1),
Tuple3.of("James", LocalDate.now(), 2.2),
Tuple3.of("Ron", LocalDate.now(), 3.3)
);
我个人会制作字段 _1 , _2 , 和 _3 public,但这是一个偏好。如果您愿意,您可以为它们创建 setter/getter (也许 _1() 但它不够干净。

我假设 Java 11+,但您可以通过删除 var 轻松地使其与旧版本兼容和 List.of

关于java - 内联创建自定义对象列表,无需单独的模型类 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64890287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com