- java.lang.Object
-
- jdk.dynalink.NamespaceOperation
-
- 实现的所有接口
-
Operation
public final class NamespaceOperation extends Object implements 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"
的地图元素,"empty"
如果地图不包含该键,则仅回isEmpty()
属性获取器。 如果源语言强制要求使用此语义,则可以使用多个名称空间上的操作轻松实现。即使语言本身不区分某些命名空间,将不同的语法映射到不同的命名空间顺序也会有所帮助。 例如,源表达式
obj.color
可以映射到GET:PROPERTY|ELEMENT|METHOD:color
,但是看起来像集合元素访问obj[key]
的不同源表达式可以表示为GET:ELEMENT|PROPERTY|METHOD
以便支持元素语义。 最后,如果获取的值随后被调用,那么它是有道理带来METHOD
命名空间列表的前面:源表达的吸气部分obj.color()
可能是GET:METHOD|PROPERTY|ELEMENT:color
和一个为obj[key]()
可能是GET:METHOD|ELEMENT|PROPERTY
。命名空间操作的基本操作本身不能是命名空间或命名操作,而是简单操作之一,例如
StandardOperation
的元素。 但是命名空间操作本身可以作为命名操作的基本操作; 从上面构建例如GET:ELEMENT|PROPERTY:empty
的典型方法是:Operation getElementOrPropertyEmpty = StandardOperation.GET .withNamespaces( StandardNamespace.ELEMENT, StandardNamespace.PROPERTY) .named("empty");
-
-
构造方法摘要
构造方法 构造器 描述 NamespaceOperation(Operation baseOperation, Namespace... namespaces)
构造一个新的命名空间操作。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 boolean
contains(Namespace namespace)
如果此命名空间操作包含等于指定命名空间的命名空间,则返回true。static boolean
contains(Operation op, Operation baseOperation, Namespace namespace)
如果指定的操作是NamespaceOperation
并且其基本操作等于指定的操作,并且它包含指定的命名空间,则返回true。boolean
equals(Object obj)
如果另一个对象也是命名空间操作并且它们的基本操作和命名空间相等,则返回true。Operation
getBaseOperation()
返回此命名操作的基本操作。static Operation
getBaseOperation(Operation op)
如果传递的操作是命名空间操作,则返回其getBaseOperation()
,否则返回操作。Namespace
getNamespace(int i)
返回此命名空间操作中的第i个命名空间。int
getNamespaceCount()
返回此命名空间操作中的命名空间数。Namespace[]
getNamespaces()
返回此命名空间操作中的命名空间。static Namespace[]
getNamespaces(Operation op)
如果传递的操作是命名空间操作,则返回其getNamespaces()
,否则返回空数组。int
hashCode()
返回此命名空间操作的哈希码。String
toString()
返回此命名空间操作的字符串表示形式。-
声明方法的接口 jdk.dynalink.Operation
named, withNamespace, withNamespaces
-
-
-
-
构造方法详细信息
-
NamespaceOperation
public NamespaceOperation(Operation baseOperation, Namespace... namespaces)
构造一个新的命名空间操作。- 参数
-
baseOperation
- 对一个或多个名称空间进行操作的基本操作。 -
namespaces
- 此操作操作的一个或多个名称空间。 - 异常
-
IllegalArgumentException
- 如果指定的命名空间少于一个,或者基本操作本身是NamespaceOperation
或NamedOperation
。 -
NullPointerException
- 如果namespaces
数组或其任何元素是null
,或者baseOperation
是null
。
-
-
方法详细信息
-
getBaseOperation
public Operation getBaseOperation()
返回此命名操作的基本操作。- 结果
- 此命名操作的基本操作。
-
getNamespaces
public Namespace[] getNamespaces()
返回此命名空间操作中的命名空间。 返回的数组是一个副本,对它的更改对此对象没有影响。- 结果
- 此命名空间操作中的命名空间。
-
getNamespaceCount
public int getNamespaceCount()
返回此命名空间操作中的命名空间数。- 结果
- 此命名空间操作中的命名空间数。
-
getNamespace
public Namespace getNamespace(int i)
返回此命名空间操作中的第i个命名空间。- 参数
-
i
- 名称空间索引 - 结果
- 此命名空间操作中的第i个命名空间。
- 异常
-
IndexOutOfBoundsException
- 如果索引超出范围。
-
contains
public boolean contains(Namespace namespace)
如果此命名空间操作包含等于指定命名空间的命名空间,则返回true。- 参数
-
namespace
- 正在搜索的命名空间。 不能为空。 - 结果
- 如果if此命名空间操作包含等于指定命名空间的命名空间,则返回true。
-
equals
public boolean equals(Object obj)
如果另一个对象也是命名空间操作并且它们的基本操作和命名空间相等,则返回true。- 重写:
-
equals
类Object
- 参数
-
obj
- 要比较的对象 - 结果
- 如果此对象等于另一个对象,则返回true,否则返回false。
- 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此命名空间操作的哈希码。 定义为等于baseOperation.hashCode() + 31 * Arrays.hashCode(namespaces)
。- 重写:
-
hashCode
类Object
- 结果
- 此对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
toString
public String toString()
返回此命名空间操作的字符串表示形式。 定义为其基本操作的toString
,后跟冒号字符,后面是用垂直线字符分隔的命名空间列表(例如"GET:PROPERTY|ELEMENT"
)。
-
getBaseOperation
public static Operation getBaseOperation(Operation op)
如果传递的操作是命名空间操作,则返回其getBaseOperation()
,否则返回操作。- 参数
-
op
- 操作 - 结果
- 传递操作的基本操作。
-
getNamespaces
public static Namespace[] getNamespaces(Operation op)
如果传递的操作是命名空间操作,则返回其getNamespaces()
,否则返回空数组。- 参数
-
op
- 操作 - 结果
- 传递的操作的命名空间。
-
contains
public static boolean contains(Operation op, Operation baseOperation, Namespace namespace)
如果指定的操作是NamespaceOperation
并且其基本操作等于指定的操作,并且它包含指定的命名空间,则返回true。 如果它不是NamespaceOperation
,则返回false。- 参数
-
op
- 操作。 不能为空。 -
baseOperation
- 正在搜索的基本操作。 不能为空。 -
namespace
- 要搜索的命名空间。 不能为空。 - 结果
-
true if the if the passed operation is a
NamespaceOperation
, its base operation equals the searched base operation, and contains a namespace equal to the searched namespace.
-
-