2016-11-19 10 views
4

バイトバディを使用してフィールドにセッターを作成するにはどうすればよいですか?推奨される構文は何ですか?バイトバディ - メソッド実装.Context.Defaultはbeanプロパティではありません - セッターを作成します

私はフィールド(私の元の質問here)からゲッターを作成するために管理しますが、セッターを作成するためにdefineMethodを使用してMethod Implementation.Context.Default ... is no bean property例外をスローしています。

this質問に設定ツールを作成するための推奨された方法が古くなっているようです。ここで

はバイト仲間のバージョン1.5.4を使用して、私の失敗コードです:

public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException { 
     Class<?> type = new ByteBuddy() 
       .subclass(Object.class) 
       .name("domain") 
       .defineField("id", int.class, Visibility.PRIVATE)    
       .defineMethod("getId", int.class, Visibility.PUBLIC).intercept(FieldAccessor.ofBeanProperty()) 
       .defineMethod("setId", Void.TYPE, Visibility.PUBLIC).intercept(FieldAccessor.ofBeanProperty())    
       .make() 
       .load(sample.class.getClassLoader(), ClassLoadingStrategy.Default.WRAPPER) 
       .getLoaded(); 

     Object o = type.newInstance(); 
     Field f = o.getClass().getDeclaredField("id"); 
     f.setAccessible(true); 
     System.out.println(o.toString());  
     Method m = o.getClass().getDeclaredMethod("getId"); 
     System.out.println(m.getName()); 
     Method s = o.getClass().getDeclaredMethod("setId", int.class); 
     System.out.println(s.getName()); 
    } 

答えて

3

あなたはセッターのためのパラメータを定義していません。したがって、Byte Buddyはメソッドの実装方法を理解していません。 setIdメソッドを定義するには、withParameters(int.class)を設定する必要があります。

関連する問題