我试图用java创建一个anon类
class myClass {
int x = 10;
}
public class Main {
public static void main(String[] args) {
myClass myObject = new myClass() {
public void run(){
System.out.println(x);
}
};
myObject.run(); //gives an error saying "method run() is undefined for the type myClass"
}
}
它似乎根本不起作用,它给了我一个错误,说run()方法未定义。尽管我创建了一个包含run()方法的anon类,但我是一个完全的java初学者,我大部分时间用javascript编写代码,javascript是我最熟悉的语言,我正在努力适应java的概念,所以对这里的很多人来说,这个问题可能看起来很愚蠢,我为此道歉。提前谢谢
如果你用
interface myClass{
public void run();
int x = 10;
}
它应该运行。这里的问题是,在myClass声明中没有run方法
错误发生是因为编译器不知道方法run()
您可以通过将myClass
设置为接口或使用抽象方法来修复它。
abstract class myClass{
int x = 10;
public abstract void run();
}
这是因为编译器不知道有run
方法,因为基类myClass
上没有方法。
这将在Java10中工作,使用var
:
var myObject = new myClass() {
public void run(){
System.out.println(x);
}
};
myObject.run();
这是因为myObject
并不完全是myClass
,但实际上是特定的匿名类,它被称为类似于TheContainingClass1美元
(其中TheContainingClass
是该代码出现的类的名称)。
这有点奇怪,因为你不能用名字来引用这个类——只能用var!
或者,在Java的早期版本中,如果不将其分配给变量,则它可以工作:
new myClass() {
public void run(){
System.out.println(x);
}
}.run();
同样,这是因为run()
调用的接收者具有匿名类的类型,而不是myClass
;但是在预Java10中没有办法声明该类型的变量。
问题内容: 我想我了解Anonymous类的基础知识,但我想澄清一些内容。当我有这样的语法时 如果匿名类实际上是类A的内部类,如第一个示例所示:理论上,语义正确吗? 到底会发生什么?我认为在编译Java文件时,将为匿名类创建一个.class文件,以便可以对其进行引用(但我找不到它)。当实例化A对象时,它创建一个按钮对象,然后btn调用addActionListener()方法,该方法实际上将类似A
输出:类名:包。名称在这里B 有人能告诉我为什么匿名类类型在getClass()方法中给出封闭类吗?这导致了问题的出现。对象C上的equals()始终失败。我的理解是,由于getClass提供了封闭类名,所以永远不会调用重写的equals?
问题内容: 我想知道Python是否具有类似C#匿名类功能的东西。为了澄清,这是一个示例C#代码段: 在Python中,我会想象这样的事情: 特定要求是能够在表达式上下文中创建具有指定字段的对象(例如,可在lambda和不允许使用语句的其他地方使用),而无需其他外部声明,并且能够通过普通成员按名称访问各个组件访问语法。创建的对象还应按 组件名称 (而不是像元组那样按位置)实现结构比较。 特别是:元
我以为我对自己正在做的事情有很好的把握,但每当我觉得我对某事有很好的把握时,我被证明是错的:) 当我不在匿名类中时,我可以简单地执行 有人能解释为什么我可以调用方法,但不能在intent参数中使用吗?
我是一名新的程序员,正在学习Java入门课程。我的操作系统是Windows 10。大约4-5个月前,我们最初设置了类路径,从命令行运行了我们的“Hello World”程序,然后再也没有使用过它。 现在我们正在做一个输入/输出重定向到文件的练习,我必须忘记我的类路径是什么,所以我试图重新设置它。 我已经使用以下命令设置了我的类路径: 然后我尝试运行我的程序,它位于目录C:\Users\grant\
匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。 匿名类有两种实现方式: 继承一个类,重写其方法。 实现一个接口(可以是多个),实现其方法。 下面通过代码来说明。 程序的输出结果如下: 从输出结果可以看出,匿名内部类有