Java 如何将输入(int、String等)转换为相同类型的最终变量?
假设我正在构建一个FoodItem,我想输入一个新项目,我想确保项目的名称不能更改,价格也不能更改,这意味着我不能使用Setter来更改它,但我可以更改数量 我的问题如下:通过在构造函数中声明final名称和COST,我无法在构造函数之外访问它们,例如对于getName或getCost这样的方法。 我希望我的问题足够清楚,如果不只是问,我会回答 我还是java的初学者,所以如果我遗漏了一些明显的东西,请原谅我,我是来学习的Java 如何将输入(int、String等)转换为相同类型的最终变量?,java,Java,假设我正在构建一个FoodItem,我想输入一个新项目,我想确保项目的名称不能更改,价格也不能更改,这意味着我不能使用Setter来更改它,但我可以更改数量 我的问题如下:通过在构造函数中声明final名称和COST,我无法在构造函数之外访问它们,例如对于getName或getCost这样的方法。 我希望我的问题足够清楚,如果不只是问,我会回答 我还是java的初学者,所以如果我遗漏了一些明显的东西,请原谅我,我是来学习的 public class FoodItem { private
public class FoodItem {
private int _quantity;
public FoodItem (String name, int cost, int quantity){ //
final String NAME = name;
final int COST = cost;
_quantity = quantity;
}
public String getName(){ return NAME;} //<-- obviously cannot be found
public int getCost(){ return _cost;}
public int getNumber(){ return NUMBER;}
public void setCost(int newCost){ _cost = newCost;}
名称和成本在错误的地点申报。将其声明移动到声明数量的位置
private int _quantity;
private final String NAME;
private final int COST;
public FoodItem (String name, int cost, int quantity){
NAME = name;
COST = cost;
_quantity = quantity;
}
请参阅答案。要首先回答您的问题,您应该了解数据隐藏的概念 您可以通过不提供access means私有范围而不提供access方法来隐藏数据 所以在这个例子中,你可以写如下
public class FoodItem {
private int quantity;
private String name;
private int cost;
public FoodItem (String name, int cost, int quantity){ //
this.name = name;
this.cost = cost;
this.quantity = quantity;
}
public String getName(){ return name;}
public int getCost(){ return cost;}
public int getQuantity(){ return quantity;}
// providing a setter so that some one can change the quantity
public void setQuantity(int quantity){ this.quantity = quantity;}
}
在上面的例子中,我没有为name和cost提供setter,因此没有人可以访问它们,也没有人可以更改它们的值,除非它们是创建的,并且对于您提到的数量,它可以修改,这就是我提供setter的原因,因此如果有人想要更改数量,那么可以调用obj.setQuantity;方法
希望您了解这个概念。感谢您的快速回复,我没有在开始时尝试声明它们,因为我假设我无法更改它们或为它们赋值。你能帮我理解为什么这与使用无法工作的Setter不同吗。是否因为只有在收到值后才将设置为final?或者是因为它们是在构造函数中创建的?只能在构造函数创建对象时设置final。我不确定此代码是否符合要求,因为如果将变量声明为final,则会向它们分配一些值,并且不能重新分配新值。final只能在创建对象时设置哎呀,我不知道。谢谢你,泽布。关于这一点的更多信息:这与OP询问的内容无关感谢您的评论,但Yar是正确的,我是专门询问关于“最终”声明的。我同意您的意见,伊曼纽尔,我不知道这一点,因为我过去总是将最终变量声明为静态变量。但我学到了新东西。谢谢你。