我想描述一个Java类的预期输入,该类旨在执行某个任务,在Java类本身中。目的是能够直接生成加载此类的用户界面。
例如,假设基本接口是Task
(实现Runnable
):
public class BuildRectangleTask implements Task {
public void setLength(double val) { /* ... */ }
public void setWidth(double val) { /* ... */ }
public void run() { /* Build a rectangle */ }
}
我可以使用一些反射从中获取参数名称,然后构建用户界面的相关部分,例如:
<form>
<label for="length">Length: </label>
<input type="text"name="length" id="length" /><br />
<label for="width">Width: </label>
<input type="text"name="width" id="width" />
</form>
这可能适用于非常简单的示例,但访问器名称不能始终转换正确地翻译成自然语言而不会听起来尴尬(它们可能也需要翻译)。此外,我还希望能够获得额外的信息(例如,哪些是可选的或具有默认值)。
我正在考虑使用注释来描述这一点:
@Description(text="This tasks builds a rectangle")
public class BuildRectangleTask implements Task {
@Input(label="Length", optional=false)
public void setLength(double val) { /* ... */ }
@Input(label="Width", optional=true, default=10,
help="This is the width of the rectangle")
public void setWidth(double val) { /* ... */ }
public void run() { /* Build a rectangle */ }
}
这对于额外的信息也很有用,例如多项选择:
@Input(label="Colour", options={"Red", "Green", "Blue"})
我还希望能够生成其他类型的用户界面,例如命令行,基于以下信息获得这样的选择样式:
java TaskProcessor BuildRectangle --help
usage: BuildRectangle --height= [ --width=10 ] [ --color= ]
Options:
--height= ...
--width= This is the width of the rectangle (defaults to 10).
--color= Red, Blue, Green.
是否有任何标准的注释集或通常的框架来实现这一点(或者可能完全不同的方法),最好与Java和Groovy兼容?
我希望这个类尽可能是自包含的(即避免使用配置文件)。(我不一定对定义这样一项任务的输出是什么以及如何输出感兴趣应显示。)
您可以尝试http://today.java.net/pub/a/today/2008/06/24/automatic-user-interface-with-openxava.html这是你想做的事情,但可能是错误的框架!不过这可能有点过头了。
您可能想了解一下javabuilders。它与你的想法有很多重叠。特别是,它允许您以声明方式指定UI布局,并自动将数据从UI绑定到Java对象。