有没有办法为我创建的类使用自动装箱?例如,我有Number
的这个子类。
public class UnsignedInteger extends Number {
int n;
public UnsignedInteger(int n) {
if(n >= 0)
this.n = n;
else
throw new IllegalArgumentException("Only positive integers are supported");
}
}
现在,UnsignedInteger i = new UnsignedInteger(88);
工作正常,但有没有办法进行编译:{{1}}?它不适合我。提前谢谢!
答案 0 :(得分:19)
简而言之,没有。没有办法让它编译。</ p>
Java仅定义了一组有限的预定义装箱转换。
拳击转换将基本类型的表达式转换为引用类型的相应表达式。具体来说,以下九个转换称为装箱转换:
从类型布尔值到类型布尔
从类型字节到类型字节
从短类型到短类型
从char类型到Character
从int类型到Integer类型
从long类型到Long
从float类型到Float类型
从类型double到类型Double
从null类型到null类型
此外,有人可能会考虑重载=
运算符来执行此转换,但Java中不支持运算符重载,这与C ++不同,这可能是可行的。
因此,您无法在Java中进行转换。
答案 1 :(得分:12)
不,不幸的是。 Automatic boxing conversions(根据JLS §5.1.7)仅为标准primitive wrapper classes定义。
答案 2 :(得分:2)
简而言之:不,这是不可能的。为此,您需要运算符重载,这在Java中是不可用的。请参阅link。
答案 3 :(得分:0)
如果使用Groovy,可以通过实现asBoolean方法设置布尔行为:http://groovy-lang.org/semantics.html#_customizing_the_truth_with_asboolean_methods
示例:
class Color {
String name
boolean asBoolean(){
name == 'green' ? true : false
}
}
assert new Color(name: 'green')
assert !new Color(name: 'red')
我知道这不是普通的Java,而是编译为字节码并在JVM上运行。