使用运行时给定的类型创建通用映射

派特曼

标题可能有点难以理解,但让我简单地描述一下我的问题。

假设我有一个这样的注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Identifier {

}

现在,我创建一个类,用它来注释任何字段:

public class Student {
    private String name;
    private String surname;
    @Identifier
    private String idNumber;
    ...
}

最后,在运行时,我想创建一个Map键类型为typeof(field annotated with @Identifier)和值类型为的Student请注意,任何字段都可以用注释@Identifier

有任何想法吗?

编辑

好吧,让我澄清一下:

class Student {
    private String name;
    private String surname;
    @Identifier
    private String idNumber;
}

class Foo {
    @Identifier
    private Integer x;
}

//  Now, what I want to have are two maps:

SortedMap students;     //  key type: String
                        //  value type: Student
SortedMap foos;         //  key type: Integer
                        //  value type: Foo

提前致谢!

Sotirios Delimanolis

我仍然不确定您要做什么。

在运行时,我想创建一个键类型为typeof(以@Identifier注释的字段)和Student类型为值的Map

您可以创建原始MapMap<Object, Object>您可以使用注释字段的类型@Identifier我不确定“学生”值类型是什么意思,所以我假设您的意思是类型Student,即。它的Class对象。

public static void main(String[] args) throws Exception {
    Class<?> clazz = Student.class;
    Map<Object, Object> map = new HashMap<>();
    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
        Identifier annotation = field.getAnnotation(Identifier.class);
        if (annotation != null) {
            map.put(field.getType(), clazz);
        }
    }
    System.out.println(map);
}

在您的示例课有问题的情况下,将显示以下内容

{class java.lang.String=class com.spring.Student}

因此,带注释的字段类型将映射到类类型。

您将无法使用,Map<String,Student>因为您在编译时不知道类型String(甚至可能不知道Student)。您可以尝试强制转换,但要为自己设置多个ClassCastExceptions。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

运行时通用类型确定

来自分类Dev

值到类型的运行时映射

来自分类Dev

使用TypeBuilder获取在运行时创建的类的类型

来自分类Dev

从对象列表创建运行时已知类型的列表并调用通用方法

来自分类Dev

Typescript-如何使用运行时类型信息处理通用数据类型

来自分类Dev

类型指针的运行时创建?

来自分类Dev

ModelMapper在运行时更改通用类型-奇怪的行为

来自分类Dev

在运行时将对象转换为通用类型

来自分类Dev

在运行时将对象转换为通用类型

来自分类Dev

AutoMapper:运行时类型跳过给定成员

来自分类Dev

c#在运行时动态创建通用列表

来自分类Dev

c#在运行时动态创建通用列表

来自分类Dev

使用.AsFactory()的运行时类型确定

来自分类Dev

使用运行时生成的类型

来自分类Dev

NHibernate-映射运行时定义类型的属性

来自分类Dev

如何在运行时映射表创建?

来自分类Dev

使用运行时配置使参数化 ScalaCache 通用

来自分类Dev

如何在运行时使用TypeTags创建类型T的实例

来自分类Dev

是否可以在运行时在Julia中创建类型?

来自分类Dev

如何为运行时类型创建List <type>?

来自分类Dev

在运行时创建匿名记录类型

来自分类Dev

转换在运行时创建的泛型类型

来自分类Dev

使用C ++通用编程对x和y类型的所有排列进行func(x,y)的运行时调用

来自分类Dev

调用通用方法并在运行时设置通用类型

来自分类Dev

运行时类型定义

来自分类Dev

运行时类型转换

来自分类Dev

如何将运行时已知的类型转换为给定类型的列表?

来自分类Dev

java通用方法,运行时错误,

来自分类Dev

在运行时添加通用约束?

Related 相关文章

热门标签

归档