标题可能有点难理解,但是让我简要描述一下我的问题。
假设我有这样一个注释:
现在,我创建了一个类,并使用注释来注释其中的任何字段:
最后,在运行时,我想创建一个键类型为
假设我有这样一个注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Identifier {
}
现在,我创建了一个类,并使用注释来注释其中的任何字段:
public class Student {
private String name;
private String surname;
@Identifier
private String idNumber;
...
}
最后,在运行时,我想创建一个键类型为
@Identifier
注释字段的类型和值类型为 Student
的 Map
。请注意,任何字段都可以带有 @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
提前感谢您!
keyType
只能在运行时确定。valType
也是如此。你可以创建Map
,但你不能像那样有用地声明一个变量来保存它。 - Sotirios DelimanoliscreateTreeMap
时知道类并可以为K
和V
提供Class对象,则可以使用未经检查的转换来实现。否则,也许您可以澄清您真正想要在这里做什么。您真的需要泛型吗? - Radiodeffor(/* 所有字段 */) { if(/* 字段被注解 */) { /* 将内容放入 map */ } }
你只需要返回一个Map<Object, Object>
、Map<?, ?>
或者Map
(不推荐使用原始 Map),或者像这样一个Map<? extends Comparable<?>, ? extends Serializable>
。 - Radiodef