gpt4 book ai didi

java - 可选类成员

转载 作者:行者123 更新时间:2023-12-03 23:14:53 26 4
gpt4 key购买 nike

我从 XML 文件导入数据以供内部使用。现在有一个 uint 值,(根据 XSD)不需要它。现在的问题是:如何在我的类中映射此行为(尚不清楚,如果值存在或不存在,但我需要在运行时知道)

基本上我看到了 3 种解决方案:

解决方案 1:使用我们知道它们无效的值将值标记为“未设置”:

public class Solution1 {
private int optionalVal;

public boolean isSetOptionalVal() {
return (optionalVal>=0);
}

public void setOptionalVal(int val) {
optionalVal = val;
}

public void unSetOptionalVal() {
optionalVal = -1;
}

public int optionalVal() {
if(isSetOptionalVal()) {
return optionalVal;
} else {
return -1;
}
}
}

解决方案 2:如果值为 'not-set',则使用装箱类并将其设置为 null:

public class Solution2 {
private Integer optionalVal;

public boolean isSetOptionalVal() {
return (optionalVal!=null);
}

public void setOptionalVal(int val) {
optionalVal = val;
}

public void unSetOptionalVal() {
optionalVal = null;
}

public int optionalVal() {
if(isSetOptionalVal()) {
return optionalVal;
} else {
return -1;
}
}
}

解决方案 3:使用将值描述为“未设置”的附加变量:

public class Solution3 {
private int optionalVal;
private boolean optionalValSet;

public boolean isSetOptionalVal() {
return (optionalValSet);
}

public void setOptionalVal(int val) {
optionalVal = val;
optionalValSet = true;
}

public void unSetOptionalVal() {
optionalValSet = false;
}

public int optionalVal() {
if(isSetOptionalVal()) {
return optionalVal;
} else {
return -1;
}
}
}

这些是我解决问题的建议,但我真的不喜欢其中任何一个。

解决方案 1 似乎很 hacky,也许在某处我无法确定无效值。

解决方案 2 实际上是我正在使用的解决方案,但我只需要一些 memeber 变量的附加信息,所以我要么将一些变量用作盒装类型,将一些变量用作原始类型(这看起来不一致),或者我有总是使用盒装类型(我不太喜欢)。

解决方案 3 似乎是最干净的,但在这里我担心,在某些地方 bool 设置不正确,这将很难发现错误(我已经有很多代码,并找到了问题, 一些元素最近没有在 XML 中设置)

那么...您更喜欢什么解决方案来解决“可选值”问题 - 是否有更好的解决方案?这个问题一般是怎么处理的?

最佳答案

我会选择选项 2,使用 Integer 类,并将 int 和 Integer 之间的转换留给自动装箱。这种方法的优点是它将与您的可选值相关的所有内容保存在单个变量中。

第一个选项是一个神奇的值,如果未使用的值后来变成了使用的值,维护起来就成了一场噩梦。

第三个选项意味着必须同时跟踪 int 和跟踪是否使用它的问题的 boolean 值。如果您打算这样做,请考虑将其作为一个类......但是您也可以使用 Integer。

关于java - 可选类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7873832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com