On 01 Jul 2014, at 12:05, Stefan Seifert <sseif...@pro-vision.de> wrote:

>> Foo f = someObject.adaptTo(RequireAdapter<Foo>.class));
> 
> this would still require an "unwrapping" of the object out of the 
> RequireAdapter<Foo> instance.
In my regard there is an instanceof RequireAdapter check within the 
AdapterManagerImpl which would in that case just pass/throw exceptions. So no 
need to unwrap anything for the client.
The only questions is how to get the generic type at runtime (within the 
AdapterManagerImpl), but there are solutions to that as well: 
http://stackoverflow.com/questions/3403909/get-generic-type-of-class-at-runtime


> 
>> Foo f = someObject.adaptTo(RequireAdapter.for(Foo.class));
> 
> this looks interesting, and does not need unwrapping if the return value is 
> the input class.
> i assume it could be implemented using a ThreadLocal or similar as well?
> 
> stefan
> 
> 
>> -----Original Message-----
>> From: Konrad Windszus [mailto:konra...@gmx.de]
>> Sent: Tuesday, July 01, 2014 11:58 AM
>> To: dev@sling.apache.org
>> Cc: Bertrand Delacretaz
>> Subject: Re: adaptTo and results ....
>> 
>> I like that approach. It is backwards-compatible and allows the developers to
>> decide whether they want to check for null or to rely on exceptions.
>> The AdapterManagerImpl indeed would need to deal with such a parametrisation
>> and in addition the javadocs would need to be adjusted to make it clear that
>> AdapterFactories may throw RuntimeExceptions.
>> Those exceptions should be caught by the AdapterManagerImpl when the
>> RequireAdapter was not requested and in the other case just passed along.
>> 
>> 
>> On 01 Jul 2014, at 09:44, Bertrand Delacretaz <bdelacre...@apache.org> wrote:
>> 
>>> On Tue, Jul 1, 2014 at 9:41 AM, Bertrand Delacretaz
>>> <bdelacre...@apache.org> wrote:
>>>> ...how about this:
>>>> 
>>>> Foo f = someObject.adaptTo(RequireAdapter.for(Foo.class));
>>> 
>>> Actually, rereading SLING-3714, this can be made simpler with generics
>>> 
>>> Foo f = someObject.adaptTo(RequireAdapter<Foo>.class));
>>> 
>>> where RequireAdapter causes AdapterManagerImpl to wrap the adapters to
>>> throw an exception if adaption returns null.
>>> 
>>> -Bertrand
> 

Reply via email to