- 所有已实现的接口:
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" 的映射元素(如果map包含该键),并且仅在映射不包含键时回退到 isEmpty() 属性获取器。如果源语言要求这种语义,则可以使用对多个命名空间的操作轻松实现。
即使语言本身不区分某些名称空间,将不同的语法映射到不同的名称空间顺序也会很有帮助。例如,源表达式 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");
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述boolean如果此命名空间操作包含等于指定命名空间的命名空间,则返回 true。static boolean如果指定的操作是NamespaceOperation并且它的基本操作等于指定的操作,并且它包含指定的命名空间,则返回 true。boolean如果另一个对象也是命名空间操作并且它们的基本操作和命名空间相等,则返回 true。返回此命名操作的基本操作。static Operation如果传递的操作是命名空间操作,则返回其getBaseOperation(),否则按原样返回操作。getNamespace(int i) 返回此命名空间操作中的第 i 个命名空间。int返回此命名空间操作中命名空间的数量。返回此命名空间操作中的命名空间。static Namespace[]如果传递的操作是命名空间操作,则返回其getNamespaces(),否则返回一个空数组。inthashCode()返回此命名空间操作的哈希码。toString()返回此命名空间操作的字符串表示形式。在接口 jdk.dynalink.Operation 中声明的方法
named, withNamespace, withNamespaces
-
构造方法详细信息
-
NamespaceOperation
构造一个新的命名空间操作。- 参数:
baseOperation- 对一个或多个名称空间进行操作的基本操作。namespaces- 此操作操作的一个或多个命名空间。- 抛出:
IllegalArgumentException- 如果指定的命名空间少于一个,或者基本操作本身是NamespaceOperation或NamedOperation。NullPointerException- 如果namespaces数组或其任何元素是null,或者如果baseOperation是null。
-
-
方法详情
-
getBaseOperation
返回此命名操作的基本操作。- 返回:
- 此命名操作的基本操作。
-
getNamespaces
返回此命名空间操作中的命名空间。返回的数组是一个副本,对其的更改不会影响此对象。- 返回:
- 此命名空间操作中的命名空间。
-
getNamespaceCount
public int getNamespaceCount()返回此命名空间操作中命名空间的数量。- 返回:
- 此命名空间操作中的命名空间数。
-
getNamespace
返回此命名空间操作中的第 i 个命名空间。- 参数:
i- 命名空间索引- 返回:
- 此命名空间操作中的第 i 个命名空间。
- 抛出:
IndexOutOfBoundsException- 如果索引超出范围。
-
contains
如果此命名空间操作包含等于指定命名空间的命名空间,则返回 true。- 参数:
namespace- 正在搜索的名称空间。不得为空。- 返回:
- 如果此命名空间操作包含等于指定命名空间的命名空间,则为真。
-
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- 操作。不得为空。baseOperation- 正在搜索的基本操作。不得为空。namespace- 正在搜索的名称空间。不得为空。- 返回:
-
如果传递的操作是
NamespaceOperation,则为真,其基本操作等于搜索到的基本操作,并且包含一个与搜索到的命名空间相等的命名空间。
-