Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取泛型类Java的注释_Java_Generics_Annotations - Fatal编程技术网

读取泛型类Java的注释

读取泛型类Java的注释,java,generics,annotations,Java,Generics,Annotations,我有一个使用Dao类(Dao.java)的想法: 但问题是如果我跑的话 @Test public void testDaoUrl() { Dao<Account> dao = new Dao<Account>(); dao.getUrl(); } 是的,还有另一种解决方案,但它比将Class参数传递给Dao构造函数更难看,而且更容易出错 这一技巧被称为。我看到它主要用于反序列化库(如Gson或Jackson for JSON) 然后可以提取并使用参数化类

我有一个使用Dao类(Dao.java)的想法:

但问题是如果我跑的话

@Test
public void testDaoUrl() {
    Dao<Account> dao = new Dao<Account>();
    dao.getUrl();
}

是的,还有另一种解决方案,但它比将
Class
参数传递给
Dao
构造函数更难看,而且更容易出错

这一技巧被称为。我看到它主要用于反序列化库(如Gson或Jackson for JSON)


然后可以提取并使用参数化类型。

Model.class
应该是编译器错误。此外,可能的重复:
@MyPath(url = "blabla")
class Account extends AbstractModel {
    ...
}
@Test
public void testDaoUrl() {
    Dao<Account> dao = new Dao<Account>();
    dao.getUrl();
}
@Retention(RUNTIME)
@Target(TYPE)
@interface MyPath {
    public String url();
}
class Dao<Model extends AbstractModel> {
    private final Class<?> typeArgument;

    public Dao() {
        Type superclass = getClass().getGenericSuperclass(); 
        ParameterizedType parameterized = (ParameterizedType) superclass;
        // with nested generic types, this becomes a little more complicated
        typeArgument = (Class<?>) parameterized.getActualTypeArguments()[0];
    }

    public String getUrl() {
        return typeArgument.getAnnotation(MyPath.class).url();
    }
}
new Dao<Account>(){}.getUrl()
class AnonymousDao extends Dao<Account> {}