You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Henri Biestro (JIRA)" <ji...@apache.org> on 2015/08/24 18:15:46 UTC
[jira] [Comment Edited] (JEXL-174) Overloadable property access
operators
[ https://issues.apache.org/jira/browse/JEXL-174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14709533#comment-14709533 ]
Henri Biestro edited comment on JEXL-174 at 8/24/15 4:15 PM:
-------------------------------------------------------------
These overloads will also occur in the JexlArithmetic derived class (like any other operator).
The new operators/methods that will be introduced are:
propertyGet/propertySet/arrayGet/arraySet
They need to be public and will be 'resolved' using the common method matching algorithm.
The former two will be called when using a '.' as in: {code}foo.bar{code}
The latter two will be called when using a '[]' as in: {code}foo[bar]{code}
A simplified example where Maps always use their get/put to access properties:
{code}
public static class MapArithmetic extends JexlArithmetic {
public MapArithmetic(boolean flag) {
super(flag);
}
public Object propertyGet(Map<?,?> map, Object identifier) {
return arrayGet(map, identifier);
}
public Object propertySet(Map<Object, Object> map, Object identifier, Object value) {
return arraySet(map, identifier, value);
}
public Object arrayGet(Map<?,?> map, Object identifier) {
return map.get(identifier);
}
public Object arraySet(Map<Object, Object> map, Object identifier, Object value) {
map.put(identifier, value);
return value;
}
}
{code}
was (Author: henrib):
These overloads will also occur in the JexlArithmetic derived class (like any other operator).
The new operators/methods that will be introduced are:
propertyGet/propertySet/arrayGet/arraySet
They need to be public and will be 'resolved' using the common method matching algorithm.
The former two will be called when using a '.' as in: {code}foo.bar{code}
The latter two will be called when using a '[]' as in: {code}foo[bar]{code}
A simplified example where Maps always use their get/put to access properties:
{code}
public static class MapArithmetic extends JexlArithmetic {
public MapArithmetic(boolean flag) {
super(flag);
}
public Object propertyGet(Map<?,?> map, Object identifier) {
return arrayGet(map, identifier);
}
public Object propertySet(Map<Object, Object> map, Object identifier, Object value) {
return arraySet(map, identifier, value);
}
public Object arrayGet(Map<?,?> map, Object identifier) {
return map.get(identifier);
}
public Object arraySet(Map<Object, Object> map, Object identifier, Object value) {
map.put(identifier, value);
return value;
}
}
{code}
> Overloadable property access operators
> --------------------------------------
>
> Key: JEXL-174
> URL: https://issues.apache.org/jira/browse/JEXL-174
> Project: Commons JEXL
> Issue Type: New Feature
> Affects Versions: 3.0
> Reporter: Dmitri Blinov
> Priority: Minor
>
> In analogy with overloading operators like empty(), size() etc, provide a way to overload property "get" and "set" operators ([] and .), like
> {code}
> public Object getAt(Object obj, Object index) {...}
> public Object putAt(Object obj, Object index, Object value) {...}
> {code}
> Overloaded operators should be tried before any standard access stategy, ie MAP, POJO etc.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)