问题
Is there any way to use autoboxing for the classes I create? For example, I have this subclass of 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\");
}
}
Now, UnsignedInteger i = new UnsignedInteger(88);
works perfectly fine, but is there any way to make this compile : UnsignedInteger i = 88;
? It won\'t for me. Thanks in advance!
回答1:
In short, no. There's no way to get that to compile.
Java only defines a limited set of pre-defined boxing conversions.
From the JLS, section 5.1.7:
Boxing conversion converts expressions of primitive type to corresponding expressions of reference type. Specifically, the following nine conversions are called the boxing conversions:
From type boolean to type Boolean
From type byte to type Byte
From type short to type Short
From type char to type Character
From type int to type Integer
From type long to type Long
From type float to type Float
From type double to type Double
From the null type to the null type
Additionally, one might think of overloading the =
operator to perform this conversion, but operator overloading is not supported in Java, unlike in C++, where this would be possible.
So your conversion is not possible in Java.
回答2:
No, unfortunately. Automatic boxing conversions (as per JLS §5.1.7) are only defined for the standard primitive wrapper classes.
回答3:
In short : No, it's not possible. For this to work, you need operator overloading, which is not available in Java. See link.
回答4:
If you use Groovy, you can set the boolean behavior by implementing the asBoolean method: http://groovy-lang.org/semantics.html#_customizing_the_truth_with_asboolean_methods
Example:
class Color {
String name
boolean asBoolean(){
name == 'green' ? true : false
}
}
assert new Color(name: 'green')
assert !new Color(name: 'red')
I know this is not plain Java but compiles to bytecode and runs on the JVM.
来源:https://stackoverflow.com/questions/17619724/is-autoboxing-possible-for-the-classes-i-create