- 所有已实现的接口:
-
Operation
Namespace
。例如,属性getter将被描述为
Operation propertyGetter = new NamespaceOperation( StandardOperation.GET, StandardNamespace.PROPERTY);它们经常与
NamedOperation
结合使用,例如,为名为"color"的属性创建属性getter,您可以构造如下内容:
Operation colorPropertyGetter = new NamedOperation( new NamespaceOperation( StandardOperation.GET, StandardNamespace.PROPERTY), "color");
虽然可以直接构造NamespaceOperation
,但通常最好使用Operation.withNamespace(Namespace)
和Operation.withNamespaces(Namespace...)
工厂方法,例如:
Operation getElementOrPropertyEmpty = StandardOperation.GET .withNamespace(StandardNamespace.PROPERTY) .named("color");
多个命名空间上的操作
如果指定了多个命名空间,则这些命名空间被视为首选顺序的替代项。这种操作的语义是“首选适用”。也就是说,GET:PROPERTY|ELEMENT:color
的组合应被解释为获取对象上命名为"color"的属性,但如果属性不存在,则获取命名为"color"的集合元素。
具有多个命名空间的操作对于不区分一个或多个命名空间的语言的实现很有帮助,或者在表达针对既可以被视为普通对象又可以被视为集合的对象的操作时很有帮助,例如Java Map
对象。针对Java映射的GET:PROPERTY|ELEMENT:empty
操作将始终匹配Map.isEmpty()
属性,但GET:ELEMENT|PROPERTY:empty
实际上将匹配具有键"empty"
的映射元素,如果映射包含该键,则仅回退到isEmpty()
属性getter,如果映射不包含该键。如果源语言规定了这种语义,可以很容易地通过多个命名空间上的操作来实现。
即使语言本身不区分某些命名空间,将不同的语法映射到不同的命名空间顺序也可能有所帮助。例如,源表达式obj.color
可以映射到GET:PROPERTY|ELEMENT|METHOD:color
,但类似于集合元素访问的不同源表达式obj[key]
可以表示为GET:ELEMENT|PROPERTY|METHOD
,以便优先考虑元素语义。最后,如果检索到的值随后被调用,则将METHOD
带到命名空间列表的前面是有意义的:源表达式obj.color()
的getter部分可以是GET:METHOD|PROPERTY|ELEMENT:color
,而obj[key]()
的getter部分可以是GET:METHOD|ELEMENT|PROPERTY
。
命名空间操作的基本操作本身不能是命名空间或命名操作,而是简单操作的元素,例如StandardOperation
的元素。但是,命名空间操作本身可以作为命名操作的基本操作;从上面的例子中构造GET:ELEMENT|PROPERTY:empty
的典型方法如下:
Operation getElementOrPropertyEmpty = StandardOperation.GET .withNamespaces( StandardNamespace.ELEMENT, StandardNamespace.PROPERTY) .named("empty");
-
Constructor Summary
ConstructorDescriptionNamespaceOperation
(Operation baseOperation, Namespace... namespaces) 构造一个新的命名空间操作。 -
Method Summary
Modifier and TypeMethodDescriptionboolean
如果此命名空间操作包含与指定命名空间相等的命名空间,则返回true。static boolean
如果指定的操作是NamespaceOperation
,并且其基本操作等于指定操作,并且它包含指定的命名空间,则返回true。boolean
如果另一个对象也是命名空间操作,并且它们的基本操作和命名空间相等,则返回true。返回此命名空间操作的基本操作。static Operation
如果传递的操作是命名空间操作,则返回其getBaseOperation()
,否则返回操作本身。getNamespace
(int i) 返回此命名空间操作中的第i个命名空间。int
返回此命名空间操作中的命名空间数。返回此命名空间操作中的命名空间。static Namespace[]
如果传递的操作是命名空间操作,则返回其getNamespaces()
,否则返回一个空数组。int
hashCode()
返回此命名空间操作的哈希码。toString()
返回此命名空间操作的字符串表示。Methods declared in class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods declared in interface jdk.dynalink.Operation
named, withNamespace, withNamespaces
-
Constructor Details
-
NamespaceOperation
构造一个新的命名空间操作。- 参数:
-
baseOperation
- 操作在一个或多个命名空间上操作。 -
namespaces
- 此操作操作的一个或多个命名空间。 - 抛出:
-
IllegalArgumentException
- 如果指定少于一个命名空间,或基本操作本身是NamespaceOperation
或NamedOperation
。 -
NullPointerException
- 如果namespaces
数组或其任何元素为null
,或者baseOperation
为null
。
-
-
Method Details
-
getBaseOperation
返回此命名空间操作的基本操作。- 返回:
- 此命名空间操作的基本操作。
-
getNamespaces
返回此命名空间操作中的命名空间。返回的数组是一个副本,对其的更改不会影响此对象。- 返回:
- 此命名空间操作中的命名空间。
-
getNamespaceCount
public int getNamespaceCount()返回此命名空间操作中的命名空间数。- 返回:
- 此命名空间操作中的命名空间数。
-
getNamespace
返回此命名空间操作中的第i个命名空间。- 参数:
-
i
- 命名空间索引 - 返回:
- 此命名空间操作中的第i个命名空间。
- 抛出:
-
IndexOutOfBoundsException
- 如果索引超出范围。
-
contains
如果此命名空间操作包含与指定命名空间相等的命名空间,则返回true。- 参数:
-
namespace
- 要搜索的命名空间。不得为null。 - 返回:
- 如果此命名空间操作包含与指定命名空间相等的命名空间,则返回true。
-
equals
如果另一个对象也是命名空间操作,并且它们的基本操作和命名空间相等,则返回true。 -
hashCode
public int hashCode()返回此命名空间操作的哈希码。定义为baseOperation.hashCode() + 31 * Arrays.hashCode(namespaces)
。 -
toString
返回此命名空间操作的字符串表示。定义为其基本操作的toString
,后跟冒号字符,后跟其命名空间列表,用竖线字符分隔(例如"GET:PROPERTY|ELEMENT"
)。 -
getBaseOperation
如果传递的操作是命名空间操作,则返回其getBaseOperation()
,否则返回操作本身。- 参数:
-
op
- 操作 - 返回:
- 传递操作的基本操作。
-
getNamespaces
如果传递的操作是命名空间操作,则返回其getNamespaces()
,否则返回一个空数组。- 参数:
-
op
- 操作 - 返回:
- 传递操作的命名空间。
-
contains
如果指定的操作是一个NamespaceOperation
,并且其基本操作等于指定的操作,并且它包含指定的命名空间,则返回true。如果它不是一个NamespaceOperation
,则返回false。- 参数:
-
op
- 操作。不得为null。 -
baseOperation
- 正在搜索的基本操作。不得为null。 -
namespace
- 正在搜索的命名空间。不得为null。 - 返回:
-
如果传递的操作是一个
NamespaceOperation
,其基本操作等于搜索的基本操作,并且包含等于搜索的命名空间的命名空间,则返回true。
-