如何在Java中将值作为对象提供给注释

时间:2016-02-22 23:17:26

标签: java refactoring mybatis

我正在使用mybatis,下一个代码正在运行:

var container = new Container(x => {
    x.For(typeof(IDataService<>)).Use(typeof(DataService<>));

    // Override custom implementations of DataService<>
    x.Scan(scanner => {
        scan.AssemblyContainingType<IClientService>();
        scan.AssemblyContainingType<ClientService>();
        scan.Convention<AllInterfacesConvention>();
    });
});

// This should now be of type ClientService
var service = container.GetInstance<IDataService<Client>>();

但我想尝试一下&#34;更好&#34;,所以我尝试了这个:

@Select(GET_USER_DATA)
@Results(value = {
    @Result(property="webUserId",javaType=String.class,column="id_usuario_web"),
    @Result(property="webUserType",javaType=String.class,column="tipo_usuario_web"),
    @Result(property="webUserLastname",javaType=String.class,column="apellidos")
})
WebUser getUserData(@Param("login") final String login, @Param("password") final String password);

为此我在班上创建了这个枚举:

@Select(GET_USER_DATA)
@Results(value = {
    @Result(WebUserTable.WEB_USER_ID.getResultObject()), 
    @Result(WebUserTable.WEB_USER_TYPE.getResultObject()),
    @Result(WebUserTable.WEB_USER_LASTNAME.getResultObject())
})
WebUser getUserData(@Param("login") final String login, @Param("password") final String password);

但我在enum WebUserTable{ WEB_USER_ID("webUserId", Integer.class, "usuario_web_id"), WEB_USER_TYPE("webUserType", String.class, "tipo_usuario_web"), WEB_USER_LASTNAME("webUserLastname",String.class,"apellidos"); private Object result; WebUserTable(final String _property, final Class _javaType, final String _column){ result = new Object(){ String property = _property; Class javaType = _javaType; String column = _column; }; } public final Object getResultObject() { return result; } }; 行中收到此错误This attribute value is undefined for the annotation type Result

2 个答案:

答案 0 :(得分:0)

注释仅允许原始数据类型,字符串,类,枚举,另一个注释或此类数组。尽管WebUserTable是一个枚举,但要获得细节需要方法调用,注释不能这样做。

在某些方面,注释处理不仅仅是简单的替换,我经常使用C #defines来确保我不会太疯狂。

答案 1 :(得分:0)

Java中的注释是静态的(它们必须在编译时完全定义)。 因此,只能将原始类型,字符串,枚举和类添加为注释值。

在您的示例中,您在注释定义中调用public class Utils { private SharedPreferences sharedPreferences; public Utils (Context context) { this.sharedPreferences = getPreferences(MODE_PRIVATE); } public String getPreferences(String key) { sharedPreferences.getString(key, "UserName"); return userName; } } 方法。它被编译器拒绝,因为它没有在编译时定义。