如何调用Anonymous class的多个方法?
How to call multiple methods of Anonymous class?
在下面的代码块中,我通过扩展 LinkedList
创建了一个匿名 class
,但不知道如何在匿名 class
之外调用多个方法。我可以调用一种方法,但正如 .dummy1()
最后提到的那样
void methodOC_3() {
int x = 0;
new LinkedList() {
/**
*
*/
private static final long serialVersionUID = -2091001803840835817L;
// Anonymous class is extending class LinkedList
public void dummy1() {
//x=4; Will give error, Or declare x as final variable
//you can read it As Of Now, since it is effectively final.
System.out.println(x);
}
@SuppressWarnings("unused")
public void dummy2() {
dummy1();
System.out.println("Hey there :) ");
}
}.dummy1();
}
我刚刚开始探索匿名 类 和内部 类。如果我遗漏了什么,请告诉我。
你不能。
能够调用多个方法的唯一方法是将匿名 class 实例分配给某个变量。
但是,在您的 LinkedList
子 class 示例中,您只能将匿名 class 实例分配给 LinkedList
变量,这将只允许您调用LinkedList
class.
的方法
如果您的匿名 class 实例实现了一些具有 dummy1()
和 dummy2()
方法的接口,您可以将该实例分配给该接口类型的变量,这将允许您同时调用 dummy1()
和 dummy2()
.
调用匿名 class 方法的唯一方法是使用引用变量的反射 'linkedList'
LinkedList linkedList = new LinkedList() { ... }
linkedList.getClass().getMethod("dummy1").invoke();
您为什么要 class 匿名?如果它是匿名的,你就不能引用它,这正是你的问题。所以,只是不要让它匿名!您可以在方法中定义 local classes:
public static void methodOC_3() {
int x = 0;
class MyList<X> extends java.util.LinkedList<X> {
/**
*
*/
private static final long serialVersionUID = -2091001803840835817L;
public void dummy1() {
//x=4; Will give error, Or declare x as final variable
//you can read it As Of Now, since it is effectively final.
System.out.println(x);
}
public void dummy2() {
dummy1();
System.out.println("Hey there :) ");
}
}
MyList<String> a = new MyList<String>();
a.dummy1();
a.dummy2();
}
这非常有用,特别是如果你想在另一个方法中定义多个相互递归的辅助方法,而不污染名称 space。
在下面的代码块中,我通过扩展 LinkedList
创建了一个匿名 class
,但不知道如何在匿名 class
之外调用多个方法。我可以调用一种方法,但正如 .dummy1()
void methodOC_3() {
int x = 0;
new LinkedList() {
/**
*
*/
private static final long serialVersionUID = -2091001803840835817L;
// Anonymous class is extending class LinkedList
public void dummy1() {
//x=4; Will give error, Or declare x as final variable
//you can read it As Of Now, since it is effectively final.
System.out.println(x);
}
@SuppressWarnings("unused")
public void dummy2() {
dummy1();
System.out.println("Hey there :) ");
}
}.dummy1();
}
我刚刚开始探索匿名 类 和内部 类。如果我遗漏了什么,请告诉我。
你不能。
能够调用多个方法的唯一方法是将匿名 class 实例分配给某个变量。
但是,在您的 LinkedList
子 class 示例中,您只能将匿名 class 实例分配给 LinkedList
变量,这将只允许您调用LinkedList
class.
如果您的匿名 class 实例实现了一些具有 dummy1()
和 dummy2()
方法的接口,您可以将该实例分配给该接口类型的变量,这将允许您同时调用 dummy1()
和 dummy2()
.
调用匿名 class 方法的唯一方法是使用引用变量的反射 'linkedList'
LinkedList linkedList = new LinkedList() { ... }
linkedList.getClass().getMethod("dummy1").invoke();
您为什么要 class 匿名?如果它是匿名的,你就不能引用它,这正是你的问题。所以,只是不要让它匿名!您可以在方法中定义 local classes:
public static void methodOC_3() {
int x = 0;
class MyList<X> extends java.util.LinkedList<X> {
/**
*
*/
private static final long serialVersionUID = -2091001803840835817L;
public void dummy1() {
//x=4; Will give error, Or declare x as final variable
//you can read it As Of Now, since it is effectively final.
System.out.println(x);
}
public void dummy2() {
dummy1();
System.out.println("Hey there :) ");
}
}
MyList<String> a = new MyList<String>();
a.dummy1();
a.dummy2();
}
这非常有用,特别是如果你想在另一个方法中定义多个相互递归的辅助方法,而不污染名称 space。