1

我有一个看起来像这样的方法

public Collection<V> values()

在运行时,我想向 V 添加一个字段和 getter 方法。

让我给你举个例子

Collection<Person> persons = map.values();

或者

Collection<OtherObject> otherObjectCollection = map.values();

我想确保任何实例总是有一个字段/方法,

persons.getXXX();
otherObjectCollection.getXXX();

所以在我的

map.values() 

我希望能够在运行时向我的 V 实例添加一个字段和方法。

4

2 回答 2

0

我最终将该功能移到了单独的 Analyzer 类中。

于 2013-08-23T07:28:46.427 回答
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 的方法。

于 2013-08-22T13:54:43.317 回答