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

これは基本的にできません。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 に答える