You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@velocity.apache.org by Christopher Schultz <ch...@christopherschultz.net> on 2014/06/26 21:27:52 UTC

[tools] Replacement for ListTool?

All,

ListTool is marked as deprecated because Velocity 1.6 and later treat
arrays and lists as first-class collections and can perform appropriate
operations on them.

One thing it's not easy to do is determine if an object is an List or an
Array.

I have something hacked-together using ClassTool like this:

#set($bundleType=$class.inspect($bundle).type)
#if($bundleType &&
$class.inspect('java.util.List').type.isAssignableFrom($bundleType))

[the $bundle object is a List]
#end

But it's kind of verbose, plus I need to check to see if it's an array
as well.

Any suggestions using existing tools?

Thanks,
-chris


Re: [tools] Replacement for ListTool?

Posted by Sergiu Dumitriu <se...@gmail.com>.
Oh, I misread, I thought that you want to distinguish between arrays and
lists, but you want to detect both arrays and lists from any other type
of objects. Then yes, you need to check if the object is an instance of
java.util.List.

Alternatively, a simpler, but not 100% safe check is to check if calling
iterator() on the object returns something or not. This will detect any
iterable thing, not just lists, plus any custom object that happens to
have an unrelated iterator() method.

On 06/26/2014 05:32 PM, Christopher Schultz wrote:
> Sergiu,
> 
> On 6/26/14, 3:34 PM, Sergiu Dumitriu wrote:
>> This should work without any tools:
>>
>> $bundleType.class.getName().startsWith('[')
> 
> Oh, that's cool.. but it doesn't check for java.util.List (I'd need to
> either do the ugliness I have below, or check for each expected List
> implementation which of course makes no sense).
> 
> Any other suggestions? If not, I'll do what I have below plus checking
> against '['.
> 
> Thanks,
> -chris
> 
>>
>> On 06/26/2014 03:27 PM, Christopher Schultz wrote:
>>> All,
>>>
>>> ListTool is marked as deprecated because Velocity 1.6 and later treat
>>> arrays and lists as first-class collections and can perform appropriate
>>> operations on them.
>>>
>>> One thing it's not easy to do is determine if an object is an List or an
>>> Array.
>>>
>>> I have something hacked-together using ClassTool like this:
>>>
>>> #set($bundleType=$class.inspect($bundle).type)
>>> #if($bundleType &&
>>> $class.inspect('java.util.List').type.isAssignableFrom($bundleType))
>>>
>>> [the $bundle object is a List]
>>> #end
>>>
>>> But it's kind of verbose, plus I need to check to see if it's an array
>>> as well.
>>>
>>> Any suggestions using existing tools?
>>>
>>> Thanks,
>>> -chris
>>>
>>
>>
> 


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org


Re: [tools] Replacement for ListTool?

Posted by Christopher Schultz <ch...@christopherschultz.net>.
Sergiu,

On 6/26/14, 3:34 PM, Sergiu Dumitriu wrote:
> This should work without any tools:
> 
> $bundleType.class.getName().startsWith('[')

Oh, that's cool.. but it doesn't check for java.util.List (I'd need to
either do the ugliness I have below, or check for each expected List
implementation which of course makes no sense).

Any other suggestions? If not, I'll do what I have below plus checking
against '['.

Thanks,
-chris

> 
> On 06/26/2014 03:27 PM, Christopher Schultz wrote:
>> All,
>>
>> ListTool is marked as deprecated because Velocity 1.6 and later treat
>> arrays and lists as first-class collections and can perform appropriate
>> operations on them.
>>
>> One thing it's not easy to do is determine if an object is an List or an
>> Array.
>>
>> I have something hacked-together using ClassTool like this:
>>
>> #set($bundleType=$class.inspect($bundle).type)
>> #if($bundleType &&
>> $class.inspect('java.util.List').type.isAssignableFrom($bundleType))
>>
>> [the $bundle object is a List]
>> #end
>>
>> But it's kind of verbose, plus I need to check to see if it's an array
>> as well.
>>
>> Any suggestions using existing tools?
>>
>> Thanks,
>> -chris
>>
> 
> 


Re: [tools] Replacement for ListTool?

Posted by Sergiu Dumitriu <se...@gmail.com>.
This should work without any tools:

$bundleType.class.getName().startsWith('[')

On 06/26/2014 03:27 PM, Christopher Schultz wrote:
> All,
> 
> ListTool is marked as deprecated because Velocity 1.6 and later treat
> arrays and lists as first-class collections and can perform appropriate
> operations on them.
> 
> One thing it's not easy to do is determine if an object is an List or an
> Array.
> 
> I have something hacked-together using ClassTool like this:
> 
> #set($bundleType=$class.inspect($bundle).type)
> #if($bundleType &&
> $class.inspect('java.util.List').type.isAssignableFrom($bundleType))
> 
> [the $bundle object is a List]
> #end
> 
> But it's kind of verbose, plus I need to check to see if it's an array
> as well.
> 
> Any suggestions using existing tools?
> 
> Thanks,
> -chris
> 


-- 
Sergiu Dumitriu
http://purl.org/net/sergiu

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@velocity.apache.org
For additional commands, e-mail: user-help@velocity.apache.org