[英]How to define a new method inside an existing class and add a call to it in an existing method inside the same class using bytebuddy?
[英]Add new method to existing class
我知道匿名类,我们可以用它来覆盖类方法,这是一个例子:
public class User {
private final String name;
public User(final String name){
this.name=name;
}
public void sayHello(){
System.out.println("Hello : "+name);
}
public static void main(String[] args) {
User s = new User("CHORT"){
@Override
public void sayHello(){
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
}
}
但我注意到以下构造也是正确的(我的IDEA未突出显示)
public class User {
private final String name;
public User(final String name){
this.name=name;
}
public void sayHello(){
System.out.println("Hello : "+name);
}
public static void main(String[] args) {
User s = new User("CHORT"){
public void sayHello2(){
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
}
}
但是当我想调用方法sayHello2时,IDEA告诉我它不存在。此构造的目的是什么?
首先,问题的标题是错误的。 您没有“向现有类添加新方法”。 您将方法添加到扩展现有类的匿名类中。
匿名类可以包含常规类所做的任何方法。 它们不必只包含它们扩展的类的方法或它们实现的接口。
因此,在匿名类中定义sayHello2
是完全有效的,但是非常无用,因为您不能从匿名类主体外部调用该方法。
另一方面,如果您确实从匿名类主体中调用它(并且可以将其设为private
,因为无论如何都不能从外部调用它),则可能会很有用:
User s = new User("CHORT") {
@Override
public void sayHello() {
sayHello2();
}
private void sayHello2() {
System.out.println("HELLO FROM ANONYMOUS CLASS");
}
};
编辑:我想过的另一件事-您可能可以使用反射从外部调用您的sayHello2
,尽管我不确定您为什么要这么做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.