If you plan to keep all your enums in one package your only alternative I see is to:
1. Create your own NSKeyValueCoding.ValueAccessor and place it in the same package as your enums. 2. Register your newly created NSKeyValueCoding.ValueAccessor by something like this NSKeyValueCoding.ValueAccessor.setProtectedAccessorForPackageNamed(new MyValueAccessor(), MyEnum.class.getPackage().getName()); in your Application() constructor or if you use Wonder in either finishInitialization() or didFinishLaunching(). If your enums will be just a few and/or placed in different packages, then this will cause even bigger hassle. Cheers, Bogdan On 7 Jun 2013, at 13:34, Musall Maik wrote: > Good one! > > Although this isn't exactly reducing boilerplate, it shows up a completely > different way that actually works. I didn't really think of implementing > NSKeyValueCoding in an enum class. I think this is worthwhile at least for > long complicated enums where two more methods are ok. Thanks! > > Anyone else? :) > > Maik > > > Am 07.06.2013 um 13:16 schrieb Bogdan Zlatanov <bogdan.zlata...@gmail.com>: > >> And this is a more general way, but you probably guessed that already :) >> >> public enum Status implements NSKeyValueCoding { >> one { >> @Override public String description() { return "one"; } >> @Override public Integer code() { return 1; } >> }, >> two { >> @Override public String description() { return "two"; } >> @Override public Integer code() { return 2; } >> }; >> >> public abstract String description(); >> public abstract Integer code(); >> >> @Override >> public Object valueForKey(String s) { >> System.out.println("Status.valueForKey(): " + s); >> try { >> return this.getClass().getMethod(s, (Class<?>[]) >> null).invoke(this, (Object[]) null); >> } catch (Exception e) { >> e.printStackTrace(); >> throw new RuntimeException(e); >> } >> } >> >> @Override >> public void takeValueForKey(Object obj, String s) { >> // TODO Auto-generated method stub >> System.out.println("Status.takeValueForKey()"); >> } >> } >> >> On 7 Jun 2013, at 13:07, Bogdan Zlatanov wrote: >> >>> This should work, hopefully. >>> >>> public enum Status implements NSKeyValueCoding { >>> one { @Override public String description() { return "one"; }}, >>> two { @Override public String description() { return "two"; }}; >>> public abstract String description(); >>> >>> @Override >>> public Object valueForKey(String s) { >>> System.out.println("Status.valueForKey(): " + s); >>> return description(); >>> } >>> >>> @Override >>> public void takeValueForKey(Object obj, String s) { >>> // TODO Auto-generated method stub >>> System.out.println("Status.takeValueForKey()"); >>> } >>> } >>> >>> On 7 Jun 2013, at 12:34, Musall Maik wrote: >>> >>>> >>>> Got that already by private mail. All right, let's modify the example. >>>> Returning a fixed string was oversimplifying. >>>> >>>> >>>> public enum Status { >>>> one { @Override public DateTime computeValue() { new >>>> DateTime().plusDays( 1 ); }, >>>> two { @Override public DateTime computeValue() { new >>>> DateTime().plusDays( 2 ); }; >>>> public abstract DateTime computeValue(); >>>> } >>>> >>>> >>>> Maik >>>> >>>> >>>> Am 07.06.2013 um 12:27 schrieb D Tim Cummings <t...@triptera.com.au>: >>>> >>>>> Another workaround which is less ugly. >>>>> >>>>> public enum Status { >>>>> one ("eins"), >>>>> two ("zwei"); >>>>> private final String description; >>>>> Status(String description) { >>>>> this.description = description; >>>>> } >>>>> public String description() { >>>>> return description; >>>>> } >>>>> } >>>>> >>>>> Tim >>>>> >>>>> >>>>> On 07/06/2013, at 5:58 PM, Musall Maik wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> some time ago, I discovered the following problem with Enums and WO >>>>>> bindings (broken down to a simple example): >>>>>> >>>>>> package com.foo.bar; >>>>>> public class MyClass { >>>>>> public static enum Status { >>>>>> one { @Override public String description() { return >>>>>> "eins"; } }, >>>>>> two { @Override public String description() { return >>>>>> "zwei"; } }; >>>>>> public abstract String description(); >>>>>> } >>>>>> } >>>>>> >>>>>> While this works nicely in all Java code, WO bindings will not see the >>>>>> overridden description() implementations. At least not when using Java >>>>>> packages (it seems to work if everything is in the default package, but >>>>>> that doesn't help me). You get an error like: >>>>>> >>>>>> java.lang.IllegalAccessException: Class >>>>>> com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1 can not access >>>>>> a member of class com.foo.bar.MyClass$Status$1 with modifiers "public" >>>>>> >>>>>> or, if using JRebel, you get >>>>>> >>>>>> java.lang.IllegalAccessException: Class<?> >>>>>> com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1 can not access >>>>>> com.foo.bar.MyClass$Status$1! >>>>>> >>>>>> My current workaround: >>>>>> >>>>>> package com.foo.bar; >>>>>> public class MyClass { >>>>>> public static enum Status { >>>>>> one { @Override String descriptionImpl() { return "eins"; >>>>>> } }, >>>>>> two { @Override String descriptionImpl() { return "zwei"; >>>>>> } }; >>>>>> abstract String descriptionImpl(); >>>>>> public String description() { return descriptionImpl(); } >>>>>> } >>>>>> } >>>>>> >>>>>> which works but is ugly. Now I'm about to implement another Enum with a >>>>>> lot of methods and it bothers me. Anyone an idea how to improve the >>>>>> situation? >>>>>> >>>>>> Thanks >>>>>> Maik >>>>>> _______________________________________________ >>>>>> Do not post admin requests to the list. They will be ignored. >>>>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) >>>>>> Help/Unsubscribe/Update your Subscription: >>>>>> https://lists.apple.com/mailman/options/webobjects-dev/tim%40triptera.com.au >>>>>> >>>>>> This email sent to t...@triptera.com.au >>>>> >>>> >>>> _______________________________________________ >>>> Do not post admin requests to the list. They will be ignored. >>>> Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) >>>> Help/Unsubscribe/Update your Subscription: >>>> https://lists.apple.com/mailman/options/webobjects-dev/bogdan.zlatanov%40gmail.com >>>> >>>> This email sent to bogdan.zlata...@gmail.com >>> >> >
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com