Module java.desktop
Package java.beans

Class Expression

java.lang.Object
java.beans.Statement
java.beans.Expression

public class Expression extends Statement
一个Expression对象表示一个原始表达式,在这个表达式中,一个方法被应用于一个目标和一组参数,以返回一个结果 - 就像"a.getFoo()"

除了超类的属性之外,Expression对象提供了一个value,当评估这个表达式时返回的对象。返回值通常不是由调用者提供的,而是在第一次调用getValue时通过动态查找方法并调用来计算。

自从:
1.4
参见:
  • Constructor Details

    • Expression

      @ConstructorProperties({"target","methodName","arguments"}) public Expression(Object target, String methodName, Object[] arguments)
      为指定的目标对象创建一个新的Expression对象,以调用指定名称和参数数组的方法。

      targetmethodName值不应为null。否则,尝试执行此Expression将导致NullPointerException。如果arguments值为null,则将使用空数组作为arguments属性的值。

      参数:
      target - 此表达式的目标对象
      methodName - 要在指定目标上调用的方法的名称
      arguments - 要调用指定方法的参数数组
      参见:
    • Expression

      public Expression(Object value, Object target, String methodName, Object[] arguments)
      创建一个新的Expression对象,为指定的目标对象提供指定的值,以调用指定名称和参数数组的方法。 value值被用作value属性的值,因此getValue()方法将在不执行此Expression的情况下返回它。

      targetmethodName值不应为null。否则,尝试执行此Expression将导致NullPointerException。如果arguments值为null,则将使用空数组作为arguments属性的值。

      参数:
      value - 此表达式的值
      target - 此表达式的目标对象
      methodName - 要在指定目标上调用的方法的名称
      arguments - 要调用指定方法的参数数组
      参见:
  • Method Details

    • execute

      public void execute() throws Exception
      execute方法查找一个方法,其名称与methodName属性相同,并在目标上调用该方法。当目标的类定义了许多具有相同名称的方法时,实现应该使用Java语言规范(15.11中指定的算法)选择最具体的方法。目标和参数的动态类用于替代编译时类型信息,就像Method类本身一样,原始值和它们关联的包装类之间的转换在内部处理。

      以下方法类型被视为特殊情况:

      • 可以通过使用类对象作为目标来调用静态方法。
      • 保留的方法名称"new"可用于调用类的构造函数,就好像所有类都定义了静态的"new"方法。构造函数调用通常被视为Expression而不是Statement,因为它们返回一个值。
      • List接口中定义的方法名称"get"和"set"也可以应用于数组实例,映射到Array类中同名的静态方法。

      如果调用的方法正常完成,则它返回的值将被复制到value属性中。请注意,如果底层方法的返回类型为void,则value属性将设置为null

      覆盖:
      execute 在类 Statement
      抛出:
      NullPointerException - 如果targetmethodName属性的值为null
      NoSuchMethodException - 如果找不到匹配的方法
      SecurityException - 如果存在安全管理器并且拒绝方法调用
      Exception - 被调用方法抛出的异常
      自从:
      1.7
      参见:
    • getValue

      public Object getValue() throws Exception
      如果此实例的value属性尚未设置,则此方法会动态查找具有指定methodName的方法,并在此目标上调用它。方法调用的结果首先复制到此表达式的value属性中,然后作为getValue的结果返回。如果value属性已经被设置,无论是通过调用setValue还是先前调用getValue,则value属性将被返回,而不会查找或调用方法。

      Expression的value属性默认设置为一个唯一的私有(非null)值,此值用作内部指示,表明方法尚未被调用。任何其他值都会替换此默认值,确保表达式永远不会被评估多次。

      有关如何使用目标和参数的动态类型选择方法的详细信息,请参阅execute方法。

      返回:
      将此方法应用于这些参数的结果。
      抛出:
      Exception - 如果具有指定methodName的方法抛出异常
      参见:
    • setValue

      public void setValue(Object value)
      将此表达式的值设置为value。这个值将通过getValue方法返回,而不调用与此表达式相关的方法。
      参数:
      value - 此表达式的值。
      参见:
    • toString

      public String toString()
      使用Java风格的语法打印此表达式的值。
      覆盖:
      toString 在类 Statement
      返回:
      对象的字符串表示形式。