我有一个看起来像这样的方法
public Collection<V> values()
在运行时,我想向V添加字段和getter方法。
让我举个例子
Collection<Person> persons = map.values();
或
Collection<OtherObject> otherObjectCollection = map.values();
我想确保任何实例都有一个字段/方法,
persons.getXXX();
otherObjectCollection.getXXX();
所以在我的
map.values()
我希望能够在运行时向我的V实例添加字段和方法。
答案 0 :(得分:0)
基本上你不能这样做。在Java中,您无法在执行时向类型添加字段和方法。您可能希望创建自己的类型以换行原始类型,并为其他值维护Map<String, Objet>
:
public final class Annotated<T> {
private final Map<String, Object> annotations = new HashMap<>();
private final T wrapped;
public Annotated(T wrapped) {
this.wrapped = wrapped;
}
public T getWrapped() {
return wrapped;
}
public void setAnnotation(String name, Object value) {
annotations.put(name, value);
}
public Object getAnnotation(String name) {
return annotations.get(name);
}
}
当然,这不会帮助你添加方法,但不清楚为什么你想...我的猜测是你来自动态类型语言的背景。不要试图将相同的习语应用于Java - 它们将无法正常工作。相反,看看你想要完成什么的更大的图景,并找出最合适的类似Java的方法。
答案 1 :(得分:0)
我最终将该功能移到了一个单独的Analyzer类中。