2016-11-19 32 views
4

如何使用字節好友在字段上創建setter?推薦的語法是什麼?Byte Buddy - Method Implementation.Context.Default不是bean屬性 - 創建setter

我設法創建一個從外地(我原來的問題here)的吸氣劑,但使用defineMethod創建一個setter拋出一個Method Implementation.Context.Default ... is no bean property例外。

建議在this問題中創建setter的方法似乎已過時。

下面是使用字節好友的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

您還沒有定義的setter的參數。 Byte Buddy因此不瞭解如何實施該方法。定義setId方法時,需要使用Parameters(int.class)進行設置。

相關問題