2016-07-18 7 views
0

引数として任意のjava beanを指定して、そのbeanのコピーですが、そのbeanのコピーを含むBeanの型の匿名サブクラスに属するオブジェクトを返したいとします。追加プロパティ。私は私がこれまで持っているものを例に挙げて説明してみましょう:任意のJava beanにプロパティを追加します

Foo.java:

import lombok.Data; 
import lombol.AllArgsConstructor; 

@Data 
@AllArgsConstructor 
public class Foo { 
    private String bar; 
    private String baz; 
} 

Garply.java:

public class Garply { 
    Foo fooWithQux(Foo foo, String quxVal) { 
     return new Foo(foo.bar, foo.baz) { 
      private String qux; 

      public String getQux() { 
       return quxVal; 
      } 
     }; 
    } 
} 

私は実際にgetQux()を呼び出すことはできませんので、これは愚かなようで、私が使っているツールは、反射を使ってquxというプロパティを見つけ出し、私がそれを使って欲しいことをしています。

私の問題は、それぞれプロパティを追加できるようにするタイプごとに別のfooWithQux()機能を持つことを望んでいないことです。理想的には、私はbeanWithQux()のようなものを任意のタイプのオブジェクトを受け入れるでしょう。私は次のようなものでこの作業をすることができたと思う:

public T beanWithQux<T>(T bean, String quxVal) { 
    class BeanWithQux extends T { 
     private String qux; 

     BeanWithQux(T bean, String quxVal) { 
      // Here's where I'd like to copy all of the properties 
      // from the Bean into the BeanWithQux 

      qux = quxVal; 
     } 

     public getQux() { 
      return qux; 
     } 
    } 

    return BeanWithQux(bean, quxVal); 
} 

ここに私は立ち往生している。私は与えられたオブジェクトからすべてのプロパティを新しいオブジェクトにコピーすることを知らない。誰でもアイデアはありますか?理想的には、私がロンボクを使ってできることがあります(私はFooクラスをコントロールし、必要ならば@Builderのようなアノテーションを追加できます)。

ありがとうございます!

答えて

1

この場合、runtime bytecode weavingを使用する方が良い方法です。自分のコードベースでメソッドを呼び出す必要がないからです。

関連する問題