Unable to iterate over Enums...

A. Sundararajan sundararajan.athijegannathan at oracle.com
Sun Jan 26 20:45:08 PST 2014


Nashorn does not treat enums specially. i.e., Nashorn does not 
automatically call array returning values() method. But, it is possible 
to adjust the script as follows:

var MaterialEnum = Packages.MaterialEnum;

var values = MaterialEnum.values();
for (var m in values) {
     if (values[m] &&
         values[m].ordinal)
     {
         print(values[m]);
     }
}

The above code works for older Javascript engine too.

Note that the above allows code to us cache array returned by values() 
method -- because for security reasons values() of any enum always 
returns a cloned array. Implicit values call in for..in would have to 
throw the cloned enum values array everytime.

-Sundar

On Saturday 25 January 2014 05:07 AM, Walter Higgins wrote:
> Say I have a Java Enum type, In previous versions of the Javascript engine,
> I could iterator over each value like this...
>
> for (var m in MaterialEnum){
>      if (MaterialEnum[m] &&
>          MaterialEnum[m].ordinal)
>      {
>          println(MaterialEnum[m]);
>      }
> }
>
> In Nashorn, this is no longer possible. Is this a bug or is it by design?
>



More information about the nashorn-dev mailing list