What do you mean by "Enums as Objects"?

On Thu, Dec 4, 2008 at 11:11 PM, Bruno Borges <[EMAIL PROTECTED]>wrote:

> Well... You don't have to create one java file for each class. You can put
> all of them on the same file, like:
>
> public final class MyAppRoles {
>   private MyAppRoles() {}
>   public static final class Admin extends Role {
>       private Admin() {}
>   }
>
>   public static final class User extends Role {
>       private User() {}
>   }
> }
>
> Note that this is really type-safe, and these classes will never be
> instantiated.
> But, I'm not defending that we should change that. I'm just showing a
> possibility. :-)
>
> I really did't understand why Sun decided to reject Enums as Objects in
> this context of annotations.
>
> cheers,
> Bruno
>
> James Carman wrote:
>
>> I don't know about this.  It would work (and break existing code, unless
>> you
>> use something other than value for the annotation).  I don't know if I
>> would
>> want to have to create a new class for each role in my project.  Yes, it
>> would be a small price to pay, but it just feels wrong.
>>
>> On Thu, Dec 4, 2008 at 10:33 PM, Bruno Borges <[EMAIL PROTECTED]
>> >wrote:
>>
>>
>>
>>> I've found a way to implement a type-safe check for this. Here it goes:
>>>
>>> import java.lang.annotation.Documented;
>>> import java.lang.annotation.ElementType;
>>> import java.lang.annotation.Inherited;
>>> import java.lang.annotation.Retention;
>>> import java.lang.annotation.RetentionPolicy;
>>> import java.lang.annotation.Target;
>>>
>>> @AuthorizeInstantiation(value = { User.class, Admin.class })
>>> public class EnumAnnotation {
>>>
>>> }
>>>
>>> @Retention(RetentionPolicy.RUNTIME)
>>> @Target( { ElementType.PACKAGE, ElementType.TYPE })
>>> @Documented
>>> @Inherited
>>> @interface AuthorizeInstantiation {
>>>
>>>  Class<? extends Role>[] value() default {};
>>>
>>> }
>>>
>>> class Role {
>>> }
>>>
>>> class User extends Role {
>>> }
>>>
>>> class Admin extends Role {
>>> }
>>>
>>> So, the only thing that must change is the annotation
>>> @AuthorizeInstantiation, to accept classes that extends roles.
>>>
>>> Thoughts anyone?
>>>
>>> cheers,
>>> Bruno
>>>
>>>
>>>
>>> Bruno Borges wrote:
>>>
>>>
>>>
>>>> You simply can't do that because the nature of Annotations.
>>>>
>>>> Even if AuthorizeInstantiation's values were of type Object[] you
>>>> wouldn't
>>>> be able to do that with Enums.
>>>>
>>>> You will have to use Strings.
>>>>
>>>> Although there's some hack you can make using Java 6 to accomplish what
>>>> you want. If you are interested, take a look at this link:
>>>>
>>>> http://www.iam.unibe.ch/~akuhn/blog/2008/roman-numerals-in-your-java/<http://www.iam.unibe.ch/%7Eakuhn/blog/2008/roman-numerals-in-your-java/>
>>>> <
>>>> http://www.iam.unibe.ch/%7Eakuhn/blog/2008/roman-numerals-in-your-java/
>>>> >
>>>>
>>>>
>>>> Good luck!!
>>>>
>>>> Cheers,
>>>> Bruno
>>>>
>>>> miro wrote:
>>>>
>>>>
>>>>
>>>>> I am using this  @AuthorizeInstantiation   (wicket authetication
>>>>> annotation)
>>>>> in my pages , the code for this annotation
>>>>>
>>>>> @Retention(RetentionPolicy.RUNTIME)
>>>>> @Target( { ElementType.PACKAGE, ElementType.TYPE })
>>>>> @Documented
>>>>> @Inherited
>>>>> public @interface AuthorizeInstantiation {
>>>>>
>>>>>   /**
>>>>>    * Gets the roles that are allowed to take the action.
>>>>>    *      * @return the roles that are allowed. Returns a zero length
>>>>> array by
>>>>> default
>>>>>    */
>>>>>   String[] value() default {};
>>>>> }
>>>>>
>>>>>
>>>>> I created my enum with representing authorities
>>>>>
>>>>> public enum  Authorities {
>>>>>       LIASION_OFFICER,
>>>>>   GRANTS_OFFICER,
>>>>>   PROGRAM_ANALYST,
>>>>>   ADMIN;
>>>>>
>>>>> }
>>>>>
>>>>> I am trying to use  AuthorizeInstantiation   in my page  here an
>>>>> example
>>>>> @AuthorizeInstantiation(value={Authorities.LIASION_OFFICER.name()})
>>>>> public class HomePage extends BasePage {
>>>>>
>>>>>
>>>>> this line does not compile, I get the error
>>>>> The value of annotation attribute AuthorizeInstantiation .value must be
>>>>> a
>>>>> constant expression  .please help me resolve this .
>>>>>
>>>>>
>>>>>
>>>>>
>>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>>
>>>
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

Reply via email to