Trong Java, bạn có thể ghi đè lên các phương thức trong lớp mà bạn tạo bằng cách sử dụng reflection
không? Ví dụ, nói rằng tôi có lớp sau:Làm thế nào tôi có thể ghi đè lên các phương thức trong Java khi tôi tạo một đối tượng thông qua sự phản chiếu?
public class MyObject
{
public String foo, bar;
public MyObject(String foo)
{
this.foo = foo;
this.bar = foo + "bar";
}
public void setBar(String bar)
{
this.bar = bar;
}
}
Và trong một lớp Tôi muốn tạo nó trực tiếp và ghi đè phương pháp setBar
của nó như sau:
MyObject obj = new MyObject("something")
{
@Override
public void setBar(String bar)
{
this.bar = this.foo;
}
};
Có cách nào để ghi đè lên một phương pháp theo cách tương tự này bằng cách sử dụng sự phản chiếu? Có thể một cái gì đó như thế này? :
Class<?> _class = Class.forName("com.example.MyObject");
Constructor<?> _constructor = _class.getConstructor(new Class<?>[]{String.class});
Method m = _class.getMethod("setBar", new Class<?>[]{String.class});
Object obj = _constructor.newInstance("Foo String")
{
m = new Method(new Class<?>[]{String.class})
{
System.out.println("Foobar");
}
};
Nếu không, có cách nào khác để thực hiện việc này hoặc thư viện bên ngoài có thể trợ giúp không? Tôi đang tìm cách để thêm người nghe vào một phương thức setter để thay đổi các giá trị liên kết.
Bạn cần thư viện tạo mã động, chẳng hạn như * javassist *. –