Java 如何防止setter方法中的参数被更改?
例如,我有以下代码:Java 如何防止setter方法中的参数被更改?,java,setter,Java,Setter,例如,我有以下代码: public class Weather { private int temperature; //Set temperature to t. //If t goes below -15, temperature should become -15. //If t goes above 40, temperature should become 40. //If t is already between -15 and 40, it
public class Weather {
private int temperature;
//Set temperature to t.
//If t goes below -15, temperature should become -15.
//If t goes above 40, temperature should become 40.
//If t is already between -15 and 40, it should not be changed.
public void setTemperature(int t){
if(t>= -15 && t<= 40){
temperature = t;
}
else if(t< -15){
temperature = -15;
}
else if(t> 40){
temperature = 40;
}
}
}
然后温度实际上会被设置为10而不是-15,因为setTemperature函数会被调用两次。如果温度已经设置为-15到40之间的值,我需要我的代码忽略setter函数的任何未来调用。我该怎么做?以上代码是我目前所掌握的全部 尝试将Integer改为可为null的状态:
private Integer temperature = null;
public void setTemperature(int t){
if( temperature != null ) return;
if(t>= -15 && t<= 40){
temperature = t;
}
else if(t< -15){
temperature = -15;
}
else if(t> 40){
temperature = 40;
}
}
}
使用Integer.MAX_值初始化温度,如果其值小于该值,则不要在SettTemperature内执行任何操作:
public class TestMan {
public class Weather {
private int temperature = Integer.MAX_VALUE;
//Set temperature to t.
//If t goes below -15, temperature should become -15.
//If t goes above 40, temperature should become 40.
//If t is already between -15 and 40, it should not be changed.
public void setTemperature(int t){
if (temperature < Integer.MAX_VALUE) return;
if(t>= -15 && t<= 40){
temperature = t;
}
else if(t< -15){
temperature = -15;
}
else if(t> 40){
temperature = 40;
}
}
}
根据您的要求: 如果温度已经设置为-15到40之间的值,我需要我的代码忽略setter函数的任何未来调用 您可以使用一个标志来确定您的setter之前是否已被调用,如果是,则检查之前的温度是否在您的范围内,或者与下面的代码不同:
public class Weather {
private int temperature;
private boolean sette_called = false;
//Set temperature to t.
//If t goes below -15, temperature should become -15.
//If t goes above 40, temperature should become 40.
//If t is already between -15 and 40, it should not be changed.
public void setTemperature(int t){
if (sette_called)
{
if (temperature >= -15 && temperature <= 40)
return;
}
if(t>= -15 && t<= 40){
temperature = t;
}
else if(t< -15){
temperature = -15;
}
else if(t> 40){
temperature = 40;
}
sette_called = true;
}
}
使用整数数据类型。设置温度=零
如果关键字为true,则尝试标记该关键字。。我永远不会设定未来的温度 {
为什么会这样?为什么只允许一次更改?第一个值必须在构造函数中给出,并且没有定义更好的setter。您的问题令人困惑。您想做什么?如果值超出-15到40的范围,则允许温度更改,如果值在-15到40之间,则不允许任何更改?如果值>=-15,则我希望t要由客户端设置一次的温度,例如temp1.setTemperature-20,这样,如果客户端尝试再次设置相同的温度,例如temp1.setTemperature10,则温度应保持在-15,而不是更改为10。我需要更新温度,以便客户端可以设置多个温度,例如temp1、temp2、temp3等
public class Weather {
private int temperature;
private boolean sette_called = false;
//Set temperature to t.
//If t goes below -15, temperature should become -15.
//If t goes above 40, temperature should become 40.
//If t is already between -15 and 40, it should not be changed.
public void setTemperature(int t){
if (sette_called)
{
if (temperature >= -15 && temperature <= 40)
return;
}
if(t>= -15 && t<= 40){
temperature = t;
}
else if(t< -15){
temperature = -15;
}
else if(t> 40){
temperature = 40;
}
sette_called = true;
}
}
private Integer temperature = null;
public void setTemperature(int t){
if( temperature != null) {
return;
}
if(t>= -15 && t<= 40){
temperature = t;
} else if(t< -15){
temperature = -15;
} else if(t> 40){
temperature = 40;
}
}
private int temperature;
bool flag = false;
//Set temperature to t.
//If t goes below -15, temperature should become -15.
//If t goes above 40, temperature should become 40.
//If t is already between -15 and 40, it should not be changed.
public int setTemperature(int t)
{
if (flag == false)
{
if (t >= -15 && t <= 40)
{
temperature = t;
flag = true;
}
else if (t < -15)
{
temperature = -15;
flag = true;
}
else if (t > 40)
{
temperature = 40;
flag = true;
}
return temperature;
}
else
{
return temperature;
}
}