我想要一個具有多個值的物件,并且在一個值中是一個字串串列。例如一本食譜:食譜是存盤在陣列串列中的物件。每個物件都應該有一個名稱、一個布林值 (isVeggie) 以及所有成分和相關數量的串列。
我想到了物件內的其他陣列串列,但我無法訪問物件上的串列。
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;
uj5u.com熱心網友回復:
當然,您可以創建陣列或串列作為另一個物件內的屬性。考慮以下示例:
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;
}
}
類User包含一個昵稱串列。您可以創建一個User物件并訪問它的屬性,如下所示:
User user = new User("RealName", Arrays.asList("nickname1", "nickname2"));
List<String> userNicknames = userr.getNicknames();
userNicknames.add("nickname3");
uj5u.com熱心網友回復:
tl;博士
你問:
甚至可以將陣列串列存盤到物件中嗎?
是的。使用 type 定義一個成員變數,就像任何其他變數一樣ArrayList。
這里我們定義了一個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 中的命名約定,因為它們使您的代碼更易于閱讀。所以你的類名應該以大寫字母開頭。在您的情況下,以單數命名更有意義。所以:Recipe。
BigDecimal
在實際作業中,永遠不要使用精度很重要的浮點型別。浮點技術犧牲準確性換取執行速度。
因此,對于金錢等,請使用BigDecimalclass 而不是double.
多型:使用更通用的介面/超類
將您的成分串列屬性定義為更通用的介面,List而不是始終將其作為具體類ArrayList。
不可修改串列
如果您不打算允許呼叫程式員進行更改,請使用不可修改的串列填充該成分串列。
記錄
如果您的類的主要目的是透明且不可變地攜帶資料,則將該類定義為record。只需宣告您的成員欄位。編譯器隱式地創建建構式、getter、equals&hashCode和toString。
你的整個類定義變成這一行:
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 ) ;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/386159.html
上一篇:如何在javascript和json中選擇具有相同物件的陣列中的其他物件?
下一篇:網頁抓取僅提供頁面上的前4個元素
