Is autoboxing possible for the classes I create?

前端 未结 4 796
生来不讨喜
生来不讨喜 2020-11-27 19:45

Is there any way to use autoboxing for the classes I create? For example, I have this subclass of Number.

public class UnsignedInteger extends N         


        
相关标签:
4条回答
  • 2020-11-27 19:53

    No, unfortunately. Automatic boxing conversions (as per JLS §5.1.7) are only defined for the standard primitive wrapper classes.

    0 讨论(0)
  • 2020-11-27 19:54

    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.

    0 讨论(0)
  • 2020-11-27 20:07

    In short : No, it's not possible. For this to work, you need operator overloading, which is not available in Java. See link.

    0 讨论(0)
  • 2020-11-27 20:09

    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.

    0 讨论(0)
提交回复
热议问题