如何防止更改 setter 方法中的参数?
How can I prevent my parameter in my setter method from being changed?
例如我有这个代码:
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;
}
}
}
我的问题是,如果说有一个客户写
Weather temp1 = new Weather();
temp1.setTemperature(-20);
temp1.setTemperature(10);
那么温度实际上会设置为 10 而不是 -15,因为 setTemperature 函数被调用了两次。如果温度已设置为 -15 到 40 之间的值,我需要我的代码忽略以后对 setter 函数的任何调用。我该怎么做?上面的代码是我目前所有的..
尝试使用 Integer 代替可空状态:
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_VALUE
初始化 temperature
,如果 setTemperature
的值小于
,则不要在 setTemperature
中做任何事情:
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;
}
}
}
根据您的要求:
I need my code to ignore any future calls of the setter function if temperature is already set to a value between -15 and 40.
你可以使用一个标志来确定你的 setter 之前是否被调用过,如果是,然后检查之前的 temperature
是否在你的范围内,就像下面的代码一样:
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;
}
}
使用整数数据类型。设置 temperature = 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;
}
}
尝试标记关键字,如果它是真的..我永远不会设置任何未来的温度
{
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;
}
}
例如我有这个代码:
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;
}
}
}
我的问题是,如果说有一个客户写
Weather temp1 = new Weather();
temp1.setTemperature(-20);
temp1.setTemperature(10);
那么温度实际上会设置为 10 而不是 -15,因为 setTemperature 函数被调用了两次。如果温度已设置为 -15 到 40 之间的值,我需要我的代码忽略以后对 setter 函数的任何调用。我该怎么做?上面的代码是我目前所有的..
尝试使用 Integer 代替可空状态:
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_VALUE
初始化 temperature
,如果 setTemperature
的值小于
setTemperature
中做任何事情:
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;
}
}
}
根据您的要求:
I need my code to ignore any future calls of the setter function if temperature is already set to a value between -15 and 40.
你可以使用一个标志来确定你的 setter 之前是否被调用过,如果是,然后检查之前的 temperature
是否在你的范围内,就像下面的代码一样:
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;
}
}
使用整数数据类型。设置 temperature = 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;
}
}
尝试标记关键字,如果它是真的..我永远不会设置任何未来的温度 {
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;
}
}