javax.naming.directory

接口
异常
java.lang.Object
  继承者 javax.naming.directory.BasicAttribute
所有已实现的接口:
Serializable, Cloneable, Attribute

public class BasicAttribute
     
extends Object
implements Attribute

此类提供 Attribute 接口的基本实现。

此实现不支持模式方法 getAttributeDefinition()getAttributeSyntaxDefinition()。它们仅抛出 OperationNotSupportedException。如果 BasicAttribute 的子类支持它们,则其应该重写这些方法。

在测试相等性或搜索值时,BasicAttribute 类默认使用 Object.equals() 确定属性值的相等性,值为数组时除外。对于数组,需要使用 Object.equals() 检查数组的每个元素。在进行类似的相等性检查时,BasicAttribute 的子类可以通过重写那些在其中使用模式具有意义的方法来利用模式信息。类似地,默认情况下 BasicAttribute 类返回传递给其构造方法和/或使用添加/移除方法进行操作的值。BasicAttribute 的子类可以重写 get()getAll(),从目录动态获取值(或者直接实现 Attribute 接口,而不为 BasicAttribute 创建子类)。

注意,更新 BasicAttribute(如添加或移除值)对目录中相应的属性表示形式没有影响。只有使用 DirContext 接口中的操作才能实现对目录的更新。

BasicAttribute 实例与并发多线程访问不同步。试图访问并修改 BasicAttribute 的多个线程应该锁定对象。

从以下版本开始:
1.3
另请参见:
序列化表格

字段摘要
protected  String attrID
          保存属性的 id。
protected  boolean ordered
          记录此属性的值是否有序的标志。
protected  Vector<Object> values
          保存属性的值。
 
构造方法摘要
BasicAttribute(String id)
          构造一个不带值无序属性的新实例。
BasicAttribute(String id, boolean ordered)
          构造一个不带值的可能为有序属性的新实例。
BasicAttribute(String id, Object value)
          构造一个带有单个值的无序属性的新实例。
BasicAttribute(String id, Object value, boolean ordered)
          构造一个带有单个值的可能为有序属性的新实例。
 
方法摘要
 void add(int ix, Object attrVal)
          将属性值添加到属性值的有序列表中。
 boolean add(Object attrVal)
          向此属性添加新值。
 void clear()
          从此属性移除所有值。
 Object clone()
          创建并返回此对象的一个副本。
 boolean contains(Object attrVal)
          确定值是否在此属性中。
 boolean equals(Object obj)
          确定 obj 是否等于此属性。
 Object get()
          检索此属性的其中一个值。
 Object get(int ix)
          从属性值的有序列表中检索属性值。
 NamingEnumeration<?> getAll()
          检索此属性值的枚举。
 DirContext getAttributeDefinition()
          检索此属性的模式定义。
 DirContext getAttributeSyntaxDefinition()
          检索与此属性关联的语法定义。
 String getID()
          检索此属性的 id。
 int hashCode()
          计算此属性的哈希码。
 boolean isOrdered()
          确定此属性的值是否是有序的。
 Object remove(int ix)
          从属性值的有序列表中移除属性值。
 boolean remove(Object attrval)
          从此属性中移除指定值。
 Object set(int ix, Object attrVal)
          设置属性值的有序列表中的属性值。
 int size()
          检索此属性中的值数。
 String toString()
          生成此属性的字符串表示形式。
 
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 

字段详细信息

attrID

protected String attrID
保存属性的 id。其由公共构造方法初始化且不能为 null,除非已经重写 BasicAttribute 中使用 attrID 的方法。


values

protected transient Vector<Object> values
保存属性的值。由公共构造方法初始化。其不能为 null,除非已经重写 BasicAttribute 中使用这些值的方法。


ordered

protected boolean ordered
记录此属性的值是否有序的标志。

构造方法详细信息

BasicAttribute

public BasicAttribute(String id)
构造一个不带值无序属性的新实例。

参数:
id - 属性的 id。它不能为 null。

BasicAttribute

public BasicAttribute(String id,
                      Object value)
构造一个带有单个值的无序属性的新实例。

参数:
id - 属性的 id。它不能为 null。
value - 属性的值。如果为 null,则向属性中添加 null 值。

BasicAttribute

public BasicAttribute(String id,
                      boolean ordered)
构造一个不带值的可能为有序属性的新实例。

参数:
id - 属性的 id。它不能为 null。
ordered - 为 true 表示属性值将是有序的;为 false 表示其为无序。

BasicAttribute

public BasicAttribute(String id,
                      Object value,
                      boolean ordered)
构造一个带有单个值的可能为有序属性的新实例。

参数:
id - 属性的 id。它不能为 null。
value - 属性的值。如果为 null,则向属性中添加 null 值。
ordered - 为 true 表示属性值将是有序的;为 false 表示其为无序。
方法详细信息

clone

public Object clone()
从类 Object 复制的描述
创建并返回此对象的一个副本。“副本”的准确含义可能依赖于对象的类。这样做的目的是,对于任何对象 x,表达式:
x.clone() != x
为 true,表达式:
x.clone().getClass() == x.getClass()
也为 true,但这些并非必须要满足的要求。一般情况下:
x.clone().equals(x)
true,但这并非必须要满足的要求。

按照惯例,返回的对象应该通过调用 super.clone 获得。如果一个类及其所有的超类(Object 除外)都遵守此约定,则 x.clone().getClass() == x.getClass()

按照惯例,此方法返回的对象应该独立于该对象(正被复制的对象)。要获得此独立性,在 super.clone 返回对象之前,有必要对该对象的一个或多个字段进行修改。这通常意味着要复制包含正在被复制对象的内部“深层结构”的所有可变对象,并使用对副本的引用替换对这些对象的引用。如果一个类只包含基本字段或对不变对象的引用,那么通常不需要修改 super.clone 返回的对象中的字段。

Object 类的 clone 方法执行特定的复制操作。首先,如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意,所有的数组都被视为实现接口 Cloneable。否则,此方法会创建此对象的类的一个新实例,并像通过分配那样,严格使用此对象相应字段的内容初始化该对象的所有字段;这些字段的内容没有被自我复制。所以,此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。

Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。

指定者:
接口 Attribute 中的 clone
覆盖:
Object 中的 clone
返回:
此实例的一个副本。
另请参见:
Cloneable

equals

public boolean equals(Object obj)
确定 obj 是否等于此属性。如果两个属性的属性 id、语法和值都相等,则这两个属性相等。如果属性值是无序的,则添加值的顺序无关紧要。如果属性值是有序的,则值必须与顺序匹配。如果 obj 为 null 或者不是 Attribute,则返回 false。

默认情况下,在比较属性 id 及其值时使用 Object.equals(),值为数组时除外。对于数组,需要使用 Object.equals() 检查数组的每个元素。子类可以重写此方法以利用模式语法信息和匹配规则,其定义了对两个属性的相等有意义的内容。子类如何使用和是否使用模式信息由子类确定。如果子类重写 equals(),则其也应该重写 hashCode(),这样两个相等的属性才能具有相同的哈希码。

覆盖:
Object 中的 equals
参数:
obj - 要检查的可能为 null 的对象。
返回:
如果 obj 等于此属性,则返回 true,否则返回 false。
另请参见:
hashCode(), contains(java.lang.Object)

hashCode

public int hashCode()
计算此属性的哈希码。

该哈希码通过将属性 id 及其所有值的哈希码相加来计算,值为数组时除外。对于数组,要加上每个数组元素的哈希码。如果子类重写 hashCode(),则其也应该重写 equals(),这样两个相等的属性才能具有相同的哈希码。

覆盖:
Object 中的 hashCode
返回:
表示此属性的哈希码的 int。
另请参见:
equals(java.lang.Object)

toString

public String toString()
生成此属性的字符串表示形式。字符串由属性的 id 及其值组成。此字符串用于调试,不以编程方式进行解释。

覆盖:
Object 中的 toString
返回:
此属性的非 null 字符串表示形式。

getAll

public NamingEnumeration<?> getAll()
                            throws NamingException
检索此属性值的枚举。

默认情况下,返回值就是传递给构造方法的和/或使用添加/替换/移除方法对其进行操作的那些值。子类可以重写此方法以从目录动态检索值。

指定者:
接口 Attribute 中的 getAll
返回:
属性值的非 null 枚举。每个枚举元素都可能是一个 null 对象。对象的类就是属性值的类。如果属性值为 null,则元素为 null。如果属性的值为零,则返回空枚举。
抛出:
NamingException - 如果检索值时遇到命名异常。
另请参见:
Attribute.isOrdered()

get

public Object get()
           throws NamingException
检索此属性的其中一个值。

默认情况下,返回值就是传递给构造方法的和/或使用添加/替换/移除方法对其进行操作的那些值之一。子类可以重写此方法以从目录动态检索值。

指定者:
接口 Attribute 中的 get
返回:
表示属性值之一的可能为 null 的对象。如果属性值为 null,则返回 null。
抛出:
NamingException - 如果检索值时遇到命名异常。

size

public int size()
从接口 Attribute 复制的描述
检索此属性中的值数。

指定者:
接口 Attribute 中的 size
返回:
此属性中的非负值数。

getID

public String getID()
从接口 Attribute 复制的描述
检索此属性的 id。

指定者:
接口 Attribute 中的 getID
返回:
此属性的 id。它不能为 null。

contains

public boolean contains(Object attrVal)
确定值是否在此属性中。

默认情况下,在将 attrVal 与此属性的值相比较时使用 Object.equals()attrVal 为数组时除外。对于数组,需要使用 Object.equals() 检查数组的每个元素。子类可以使用模式信息确定相等性。

指定者:
接口 Attribute 中的 contains
参数:
attrVal - 要检查的可能为 null 的值。如果为 null,则检查属性是否具有其值不为 null 的属性值。
返回:
如果 attrVal 是此属性的值之一,则返回 true;否则返回 false。
另请参见:
Object.equals(java.lang.Object), equals(java.lang.Object)

add

public boolean add(Object attrVal)
向此属性添加新值。

默认情况下,在将 attrVal 与此属性的值相比较时使用 Object.equals()attrVal 为数组时除外。对于数组,需要使用 Object.equals() 检查数组的每个元素。子类可以使用模式信息确定相等性。

指定者:
接口 Attribute 中的 add
参数:
attrVal - 要添加的可能为 null 的新值。如果为 null,则将 null 作为属性值添加。
返回:
如果添加了值,则返回 true;否则返回 false。

remove

public boolean remove(Object attrval)
从此属性中移除指定值。

默认情况下,在将 attrVal 与此属性的值相比较时使用 Object.equals()attrVal 为数组时除外。对于数组,需要使用 Object.equals() 检查数组的每个元素。子类可以使用模式信息确定相等性。

指定者:
接口 Attribute 中的 remove
参数:
attrval - 要从此属性中移除的可能为 null 的值。如果为 null,则移除为 null 的属性值。
返回:
如果移除了值,则返回 true;否则返回 false。

clear

public void clear()
从接口 Attribute 复制的描述
从此属性移除所有值。

指定者:
接口 Attribute 中的 clear

isOrdered

public boolean isOrdered()
从接口 Attribute 复制的描述
确定此属性的值是否是有序的。如果属性值是有序的,则允许重复的值。如果属性值是无序的,则它们以任意顺序出现,没有重复值。

指定者:
接口 Attribute 中的 isOrdered
返回:
如果此属性的值是有序的,则返回 true;否则返回 false。
另请参见:
Attribute.get(int), Attribute.remove(int), Attribute.add(int, java.lang.Object), Attribute.set(int, java.lang.Object)

get

public Object get(int ix)
           throws NamingException
从接口 Attribute 复制的描述
从属性值的有序列表中检索属性值。此方法返回属性值列表中 ix 索引处的值。如果属性值是无序的,则此方法返回正好位于该索引处的值。

指定者:
接口 Attribute 中的 get
参数:
ix - 属性值的有序列表中值的索引。0 <= ix < size()
返回:
位于索引 ix 处的可能为 null 的属性值;如果属性值为 null,则返回 null。
抛出:
NamingException - 如果检索值时遇到命名异常。

remove

public Object remove(int ix)
从接口 Attribute 复制的描述
从属性值的有序列表中移除属性值。此方法移除属性值列表中 ix 索引处的值。如果属性值是无序的,则此方法移除正好位于该索引处的值。位于大于 ix 的索引处的值朝列表开头上移(并且其索引减一)。

指定者:
接口 Attribute 中的 remove
参数:
ix - 要移除的值的索引。0 <= ix < size()
返回:
已移除的位于索引 ix 处的可能为 null 的属性值;如果属性值为 null,则返回 null。

add

public void add(int ix,
                Object attrVal)
从接口 Attribute 复制的描述
将属性值添加到属性值的有序列表中。此方法将 attrVal 添加到属性值列表的索引 ix 处。位于 ix 处的索引的值或大于该处的索引的值朝列表的末尾下移(并且其索引加一)。如果属性值是无序的并且已经具有 attrVal,则抛出 IllegalStateException

指定者:
接口 Attribute 中的 add
参数:
ix - 要添加新值的属性值的有序列表中的索引。0 <= ix <= size()
attrVal - 要添加的可能为 null 的属性值;如果为 null,则 null 即为添加的值。

set

public Object set(int ix,
                  Object attrVal)
从接口 Attribute 复制的描述
设置属性值的有序列表中的属性值。此方法将属性值列表中 ix 索引处的值设置为 attrVal。移除旧值。如果属性值是无序的,则此方法将正好位于该索引处的值设置为 attrVal,除非 attrVal 已经是这些值中的一个。若其已经是这些值中的一个,则抛出 IllegalStateException

指定者:
接口 Attribute 中的 set
参数:
ix - 属性值的有序列表中值的索引。0 <= ix < size()
attrVal - 要使用的可能为 null 的属性值。如果为 null,则 'null' 将替换旧值。
返回:
已替换的索引 ix 处的可能为 null 的属性值。如果属性值已为 null,则返回 null。

getAttributeSyntaxDefinition

public DirContext getAttributeSyntaxDefinition()
                                        throws NamingException
检索与此属性关联的语法定义。

默认情况下此方法抛出 OperationNotSupportedException。如果子类支持模式,则其应该重写此方法。

指定者:
接口 Attribute 中的 getAttributeSyntaxDefinition
返回:
属性的语法定义。如果实现支持模式但此特定属性不具有任何模式信息,则返回 null。
抛出:
OperationNotSupportedException - 如果不支持获取模式。
NamingException - 如果在获取模式时发生命名异常。

getAttributeDefinition

public DirContext getAttributeDefinition()
                                  throws NamingException
检索此属性的模式定义。

默认情况下此方法抛出 OperationNotSupportedException。如果子类支持模式,则其应该重写此方法。

指定者:
接口 Attribute 中的 getAttributeDefinition
返回:
此属性的模式定义。如果实现支持模式但此特定属性不具有任何模式信息,则返回 null。
抛出:
OperationNotSupportedException - 如果不支持获取模式。
NamingException - 如果在获取模式时发生命名异常。