简单的描叙:
1.Statement
对象表示基本语句,其中将单个方法应用于某一目标和一组参数,以返回结果,比如 "a.setFoo(b)"
。注意,此示例使用名称来指示目标及其参数,statement 对象不需要名称空间,可以使用值本身构造。statement 对象将指定方法与其环境相关联,作为值的简单集合:目标和参数值数组
2.Expression
对象表示基本表达式,其中将单个方法应用于某一目标和一组参数,以返回结果,与在 "a.getFoo()"
中一样。
除了超类的属性之外,Expression
对象还提供了一个值,它是在对这个表达式进行求值时所返回的对象。返回值通常不由调用者提供,而是通过动态查找方法并在第一次调用 getValue
时调用查找到的方法来计算。
两者的差异:
通过上面的介绍可以知道Expression是可以获得返回值的,方法是getValue。Statement不能获得返回值
代码实现:
1.javaBean的类
package com.xmlencoder;
public class Person{
private int id;
private String name;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
测试的代码:
package com.xmlencoder;
import java.beans.Expression;
import java.beans.Statement;
public class TestStatementAndExpression {
public static void testStatement() {
try {
Person person = new Person();
person.setId(1);
person.setName("tan");
person.setContent("备注");
Statement statement1 = new Statement(person, "setId", new Object[] { 1 });
Statement statement2 = new Statement(person, "setName", new Object[] { "tan" });
Statement statement3 = new Statement(person, "setContent", new Object[] { "备注" });
statement1.execute();
statement2.execute();
statement3.execute();
System.out.println(person.getId()+"--"+person.getName()+"--"+person.getContent());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void testExpression() {
try {
Person person = new Person();
person.setId(1);
person.setName("tan");
person.setContent("备注");
Expression expression1 = new Expression(person, "setId", new Object[] { 1 });
Expression expression2 = new Expression(person, "setId", new Object[] { 1 });
Expression expression3 = new Expression(person, "setId", new Object[] { 1 });
expression1.execute();
expression2.execute();
expression3.execute();
System.out.println(person.getId()+"--"+person.getName()+"--"+person.getContent());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// TestStatementAndExpression.testStatement();//1
TestStatementAndExpression.testExpression();//2
}
}
输出结果:
1和2的输出结果一样展示:
1--tan--备注