当前位置: 首页 > 知识库问答 >
问题:

匿名类有问题[重复]

丌官积厚
2023-03-14

我试图用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的概念,所以对这里的很多人来说,这个问题可能看起来很愚蠢,我为此道歉。提前谢谢

共有3个答案

祝高阳
2023-03-14

如果你用

interface myClass{
    public void run();
    int x = 10;
}

它应该运行。这里的问题是,在myClass声明中没有run方法

孟英锐
2023-03-14

错误发生是因为编译器不知道方法run()

您可以通过将myClass设置为接口或使用抽象方法来修复它。

abstract class myClass{
    int x = 10;
    public abstract void run();
}
熊锐进
2023-03-14

这是因为编译器不知道有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和不允许使用语句的其他地方使用),而无需其他外部声明,并且能够通过普通成员按名称访问各个组件访问语法。创建的对象还应按 组件名称 (而不是像元组那样按位置)实现结构比较。 特别是:元

  • 我是一名新的程序员,正在学习Java入门课程。我的操作系统是Windows 10。大约4-5个月前,我们最初设置了类路径,从命令行运行了我们的“Hello World”程序,然后再也没有使用过它。 现在我们正在做一个输入/输出重定向到文件的练习,我必须忘记我的类路径是什么,所以我试图重新设置它。 我已经使用以下命令设置了我的类路径: 然后我尝试运行我的程序,它位于目录C:\Users\grant\

  • 我以为我对自己正在做的事情有很好的把握,但每当我觉得我对某事有很好的把握时,我被证明是错的:) 当我不在匿名类中时,我可以简单地执行 有人能解释为什么我可以调用方法,但不能在intent参数中使用吗?

  • 匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下: 这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。 匿名类有两种实现方式: 继承一个类,重写其方法。 实现一个接口(可以是多个),实现其方法。 下面通过代码来说明。 程序的输出结果如下: 从输出结果可以看出,匿名内部类有