java.beans.* 篇(2)Expression,Statement,Encoder,XmlEncoder,XmlDecoder使用案例

博客主要展示了Java中java.beans包下相关类的使用示例,包括Expression、Statement、Encoder、XmlEncoder和XmlDecoder等类,涵盖了使用演示、拆分结果、保存xml以及读取结果等内容,为Java开发提供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class User {

    private Integer id;
    private String username;

    public User(){}

    public User(Integer id,String username){
        this.id = id;
        this.username = username;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

java.beans.Expression 使用demo

 /**
     * @description: demos of jdk8 java.beans.Expression class
     * java.beans.Expression 作用:用来匹配类方法的表达式,内部通过反射直接执行某方法,节省去自己编写反射部分代码
     * 和Statement 类似 同时也是Statement  的实现类,区别是多了执行后获取返回值的方法
     * Expression 例子:
     */
    @Test
    public void testExpression() throws Exception {

        User user = new User(1,"alan");
        Expression setIdExpression = new Expression(user,"setId",new Object[]{2});
        Expression getIdusernameExpression = new Expression(user,"getId",null);
        setIdExpression.execute();
        Object id = getIdusernameExpression.getValue();
        System.out.println(id);
        System.out.println(user.getId());
    }

 java.beans.Statement 使用demo

 /**
     * @description: demos of jdk8 java.beans.Statement class
     * java.beans.Statement 作用:用来匹配类方法的表达式,内部通过反射直接执行某方法,节省去自己编写反射部分代码
     * 和Expression 类似 Expression的父类  不过没有过去执行结果的方法
     * Statement 例子:
     */
    @Test
    public void testStatement() throws Exception {

        User user = new User(1,"alan");
        Statement idStatement = new Statement(user,"setId",new Object[]{2});
        Statement usernameStatement = new Statement(user,"setUsername",new Object[]{"jack"});
        idStatement.execute();
        usernameStatement.execute();
        System.out.println(user.getId());
        System.out.println(user.getUsername());
    }

java.beans.Encoder 使用demo

static class user_PersistenceDelegate extends PersistenceDelegate {

        protected Expression instantiate(Object oldInstance, Encoder out) {
            User user = (User)oldInstance;
            return new Expression(user, user.getClass(), "new", new Object[] {1,"jack"});
        }
    }
/**
     * @description: demos of jdk8 java.beans.Encoder class
     * java.beans.Encoder 作用:Encoder 主要用来将一个类当前状态,也就是当前的属性,值 ,参数拆分成一个个的Statement 和Expression 的集合
     * 然后Encoder 的子类可以将拆分好的 Statement 和Expression 的集合 持久化,比如保存到文件或者xml 中
     * Encoder 本身一般无法独立使用,是很多encoder 类的父类,比如 XMLEncoder,writeObject 是必须子类才可以继承实现的方法,用来写对象
     * Encoder 例子:
     */
    @Test
    public void testEncoder() throws Exception {

        User user = new User();
        Encoder encoder = new Encoder();
        encoder.setPersistenceDelegate(User.class,new user_PersistenceDelegate());

        //不是子类没办法直接writeObject,只能手动写一个Statement
        encoder.writeStatement(new Statement(user,"setId",new Object[]{"1"}));
        System.out.println(encoder);
    }

拆分结果:

 

java.beans.XmlEncoder 使用demo

 /**
     * @description: demos of jdk8 java.beans.XmlEncoder class
     * java.beans.XmlEncoder 作用:XmlEncoder 是 Encoder 的子类 重写 writeObject 方法,将Encoder 拆分成一个个的Statement 和Expression 保存到xml中
     * XmlEncoder 例子:
     */
    @Test
    public void testXmlEncoder() throws Exception {

        User user = new User(1,"jack");
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
                new FileOutputStream("Test.xml"));
        XMLEncoder xmlEncoder = new XMLEncoder(bufferedOutputStream);
        xmlEncoder.writeObject(user);
        xmlEncoder.close();
    }

保存xml:

 

 

 java.beans.XmlDecoder 使用demo

 /**
     * @description: demos of jdk8 java.beans.XmlDecoder class
     * java.beans.XmlDecoder 作用:XmlDncoder 是 XmlEncoder 的解码类 ,XmlEncoder 将类当前状态写入xml,XmlDecoder 会解码将xml 反射解析为对象
     * XmlEncoder 例子:
     */
    @Test
    public void testXmlDecoder() throws Exception {

        BufferedInputStream bufferedInputStream = new BufferedInputStream(
                new FileInputStream("Test.xml"));
        XMLDecoder xmlDecoder = new XMLDecoder(bufferedInputStream);
        User user = (User) xmlDecoder.readObject();
        xmlDecoder.close();
    }

读取结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

峡谷电光马仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值