具有匿名类型构造函数的对象 class
Object class with anonymous type constructor
我正在创建一个对象作为具有匿名类型的 class 变量。没有编译错误。我的问题是如何使用class?如何调用我定义的方法?它实际用在什么地方?
public class MyClass {
Object o = new Object(){
public void myMethod(){
System.out.println("In my method");
}
};
}
我无法调用对象 o 的 myMethod()
。如何做到这一点以及我们何时使用它?
要执行这样的操作,您应该在 Object class 中有一个方法。简而言之,这意味着您需要重写 Object class.
中定义的方法
试试这样的:
Object o = new Object(){
public boolean equals(Object object){
System.out.println("In my method");
return this == object;//just bad example.
}
};
Object o2 = new Object();
System.out.println(o.equals(o2));will also print "In my method"
您的变量类型是 Object
,因此编译器只允许您调用在 Object
中声明的方法。
改为声明非匿名 class:
private static class MyObject {
public void myMethod() {
System.out.println("In my method");
}
};
MyObject o = new MyObject();
调用不属于超级 class 方法的匿名 class 方法的唯一方法是直接调用它:
new Object(){
public void myMethod(){
System.out.println("In my method");
}
}.myMethod();
如果您只是将匿名 class 存储在 Object
变量中,您将无法再调用它的方法(如您所知)。
然而,这种构造的用处似乎相当有限...
您可以使用接口:
public interface MyInterface {
public void myMethod();
}
在你的 MyClass 中
public class MyClass {
MyInterface o = new MyInterface() {
@Override
public void myMethod() {
System.out.println("In my method");
}
};
public void doSomething() {
o.myMethod();
}
}
我正在创建一个对象作为具有匿名类型的 class 变量。没有编译错误。我的问题是如何使用class?如何调用我定义的方法?它实际用在什么地方?
public class MyClass {
Object o = new Object(){
public void myMethod(){
System.out.println("In my method");
}
};
}
我无法调用对象 o 的 myMethod()
。如何做到这一点以及我们何时使用它?
要执行这样的操作,您应该在 Object class 中有一个方法。简而言之,这意味着您需要重写 Object class.
中定义的方法试试这样的:
Object o = new Object(){
public boolean equals(Object object){
System.out.println("In my method");
return this == object;//just bad example.
}
};
Object o2 = new Object();
System.out.println(o.equals(o2));will also print "In my method"
您的变量类型是 Object
,因此编译器只允许您调用在 Object
中声明的方法。
改为声明非匿名 class:
private static class MyObject {
public void myMethod() {
System.out.println("In my method");
}
};
MyObject o = new MyObject();
调用不属于超级 class 方法的匿名 class 方法的唯一方法是直接调用它:
new Object(){
public void myMethod(){
System.out.println("In my method");
}
}.myMethod();
如果您只是将匿名 class 存储在 Object
变量中,您将无法再调用它的方法(如您所知)。
然而,这种构造的用处似乎相当有限...
您可以使用接口:
public interface MyInterface {
public void myMethod();
}
在你的 MyClass 中
public class MyClass {
MyInterface o = new MyInterface() {
@Override
public void myMethod() {
System.out.println("In my method");
}
};
public void doSomething() {
o.myMethod();
}
}