[非官方]苍穹平台@注解支持探究(四)抽象类与最终实现原创
7人赞赏了该文章
702次浏览
编辑于2022年09月08日 09:26:02
1. 抽象类实现
通过上述三篇文章,我们了解了helper 的底层原理。下边我们探究一下helper究竟如何使用,我采用了一个抽象类作为中转站,里面重写了click,click,registerListener,让helper作为代理对象,去调用我们所写的方法。
public abstract class AbstractFormAnnotationPlugin extends AbstractFormPlugin { private AnnotationSupport.AnnotationHelper helper = AnnotationSupport.start(this); @Override public void click(EventObject evt) { helper.click(evt); } @Override public void itemClick(ItemClickEvent evt) { helper.itemClick(evt); } @Override public void registerListener(EventObject e) { helper.registerListener(); } }
因此我们在使用时只需要继承AbstractFormAnnotationPlugin并且 不要重写那些方法,即可完成注解支持,如果我们是在需要重写的话,请保留super.xxx()。
2.开发代码实现
让我们实现一个最简单的需求,点击文本字段旁边的按钮,弹出文本框中内容。
如果使用原生模式,会出现这样的代码。
public class TextFieldClick extends AbstractFormPlugin { private final static String KEY_TEXTFIELD1 = "textfield1"; @Override public void registerListener(EventObject e) { super.registerListener(e); // 侦听文本字段按钮点击事件 this.addClickListeners(KEY_TEXTFIELD1); } @Override public void click(EventObject evt) { super.click(evt); Control source = (Control)evt.getSource(); if (StringUtils.equals(KEY_TEXTFIELD1, source.getKey())){ this.getView().showMessage((String) this.getModel().getValue(KEY_TEXTFIELD1)); } } }
当开启注解支持后
public class Test extends AbstractFormAnnotationPlugin { private final static String KEY_TEXTFIELD1 = "textfield1"; @OnClick(control = KEY_TEXTFIELD1) public void test(){ this.getView().showMessage((String) this.getModel().getValue(KEY_TEXTFIELD1)); } }
后日谈
最终我们通过四篇文章的交流,最终实现了前言所讲的无需注册和 @OnClick注解,
done
推荐阅读