[英]Can I put multiple values in object?
我想要一個具有多個值的 object 和一個字符串列表。 例如食譜:食譜是存儲在 arraylist 中的對象。 每個 object 都應該有一個名稱、一個 boolean (isVeggie) 以及所有成分和相關數量的列表。
我想到了 object 中的其他 arraylist,但我無法訪問 object 上的列表。
public String name;
public double cost;
public boolean isClassic;
public boolean isVeggie;
public boolean isVegan;
protected ArrayList<String> ingredients = new ArrayList<String>();
public recipes (String name, double cost, boolean isClassic, boolean isVeggie, boolean isVegan,
ArrayList<String> ingredients) {
super();
this.name = name;
this.cost = cost;
this.isClassic = isClassic;
this.isVeggie = isVeggie;
this.isVegan = isVegan;
this.ingredients = ingredients;
當然,您可以創建 arrays 或將其列為另一個 object 中的屬性。 考慮以下示例:
public class User {
private String name;
private List<String> nicknames;
public User(String name, List<String> nicknames) {
this.name = name;
this.nicknames = nicknames;
}
public String getName() {
return name;
}
public List<String> getNicknames() {
return nicknames;
}
public void setName(String name) {
this.name = name;
}
public void setNickNames(List<String> nicknames) {
this.nicknames = nicknames;
}
}
Class User
包含昵稱列表。 您可以創建一個User
object 並訪問它的屬性,如下所示:
User user = new User("RealName", Arrays.asList("nickname1", "nickname2"));
List<String> userNicknames = userr.getNicknames();
定義一個record
。 將List
指定為成員字段之一。
public record Recipe ( String name, double cost, boolean isClassic, boolean isVeggie, boolean isVegan, List< String > ingredients ) {}
填充List.of
。
new Recipe( // Defined as `public record Recipe`.
"Beans & Rice",
0.99d,
true ,
true,
true,
List.of( "beans", "rice" ) // `List.of` produces an object of type `List` using an unspecified concrete class.
)
訪問成分列表。
myRecipe.ingredients()
謝爾蓋的回答是正確的,應該被接受。 我將添加一些想法。
請注意 Java 中的命名約定,因為它們使您的代碼更易於閱讀。 因此,您的 class 名稱應以大寫字母開頭。 在您的情況下,以單數命名更有意義。 所以: Recipe
。
BigDecimal
在實際工作中,永遠不要使用精度很重要的浮點類型。 浮點技術犧牲了執行速度的准確性。
因此,為了錢等,請使用BigDecimal
class 而不是double
。
將您的成分列表屬性定義為更通用的接口List
,而不是始終將其承諾為具體的 class ArrayList
。
如果您不打算允許調用程序員進行更改,請使用不可修改的列表填充該成分列表。
如果您的 class 的主要目的是透明且不可變地攜帶數據,則將 class 定義為記錄。 只需聲明您的成員字段。 編譯器隱式創建構造函數、getter、 equals
& hashCode
和toString
。
您的整個 class 定義變為這一行:
public record Recipe (
String name,
BigDecimal cost,
boolean isClassic,
boolean isVeggie,
boolean isVegan,
List<String> ingredients
) {}
示例用法。
Recipe beansAndRice = new Recipe( "Beans & Rice", new BigDecimal( "0.99" ), true , true, true, List.of( "beans", "rice" ) ) ;
要訪問成分列表,請調用名稱為屬性名稱的隱式生成的訪問器方法(無get
前綴)。
List< String > ingredients = beansAndRice.ingredients() ;
要制作列表的可修改副本,請傳遞給ArrayList
的構造函數。
List< String > ingredientsToModify = new ArrayList<>( ingredients ) ;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.