[cdi-dev] [JBoss JIRA] (CDI-247) It's currently not possible to implement a primitive and wrapping type producer method for the same type

Mark Struberg (JIRA) jira-events at lists.jboss.org
Wed Aug 1 13:30:07 EDT 2012


     [ https://issues.jboss.org/browse/CDI-247?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mark Struberg updated CDI-247:
------------------------------

    Description: 
I like to implement a producer which can satisfy the following injection points:

{code}
private @Inject @IsFeatureA Boolean featureA;
private @Inject @IsFeatureA boolean featureA;
{code}

Boolean (wrapper type) and boolean (primitive type) used at the same time.
This is currently not allowed by the CDI spec!

5.2.4. "Primitive types and null values" defines that 
"For the purposes of typesafe resolution and dependency injection, primitive types and their corresponding wrapper types in the package java.lang are considered identical and assignable."

In the same paragraph it also states that
"However, if an injection point of primitive type resolves to a bean that may have null values, such as a producer method with a non-primitive return type or a producer field with a non-primitive type, the container automatically detects the prob- lem and treats it as a deployment problem."

This means that I can only have producer methods and fields which have primitive return values and never use their wrapper types if I like to inject into both boolean and Boolean fields.

But if I use the primitive type, then I loose the ability to explicitly return null for those.

Possible solution: 
As primitives and their wrapper only can be @Dependent, it would be perfectly possible to e.g. inspect the InjectionPoint and on a primitive type return a default value and for a wrapper type return null.

  was:
I like to implement a producer which can satisfy the following injection points:

{code}
private @Inject @IsFeatureA Boolean featureA;
private @Inject @IsFeatureA boolean featureA;
{code}

Boolean (wrapper type) and boolean (primitive type) used at the same time.
This is currently not allowed by the CDI spec!

5.2.4. "Primitive types and null values" defines that 
"For the purposes of typesafe resolution and dependency injection, primitive types and their corresponding wrapper types in the package java.lang are considered identical and assignable."

In the same paragraph it also states that
"However, if an injection point of primitive type resolves to a bean that may have null values, such as a producer method with a non-primitive return type or a producer field with a non-primitive type, the container automatically detects the prob- lem and treats it as a deployment problem."

This means that I can only have producer methods and fields which have primitive return values and never use their wrapper types if I like to inject into both boolean and Boolean fields.


    
> It's currently not possible to implement a primitive and wrapping type producer method for the same type
> --------------------------------------------------------------------------------------------------------
>
>                 Key: CDI-247
>                 URL: https://issues.jboss.org/browse/CDI-247
>             Project: CDI Specification Issues
>          Issue Type: Bug
>          Components: Concepts
>    Affects Versions: 1.0, 1.1.EDR1
>            Reporter: Mark Struberg
>             Fix For: 1.1 (Proposed)
>
>
> I like to implement a producer which can satisfy the following injection points:
> {code}
> private @Inject @IsFeatureA Boolean featureA;
> private @Inject @IsFeatureA boolean featureA;
> {code}
> Boolean (wrapper type) and boolean (primitive type) used at the same time.
> This is currently not allowed by the CDI spec!
> 5.2.4. "Primitive types and null values" defines that 
> "For the purposes of typesafe resolution and dependency injection, primitive types and their corresponding wrapper types in the package java.lang are considered identical and assignable."
> In the same paragraph it also states that
> "However, if an injection point of primitive type resolves to a bean that may have null values, such as a producer method with a non-primitive return type or a producer field with a non-primitive type, the container automatically detects the prob- lem and treats it as a deployment problem."
> This means that I can only have producer methods and fields which have primitive return values and never use their wrapper types if I like to inject into both boolean and Boolean fields.
> But if I use the primitive type, then I loose the ability to explicitly return null for those.
> Possible solution: 
> As primitives and their wrapper only can be @Dependent, it would be perfectly possible to e.g. inspect the InjectionPoint and on a primitive type return a default value and for a wrapper type return null.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the cdi-dev mailing list