Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何定义一个类并将其实例创建为一个构造_Java - Fatal编程技术网

Java 如何定义一个类并将其实例创建为一个构造

Java 如何定义一个类并将其实例创建为一个构造,java,Java,我想减少以下代码行。不必声明该类,然后创建该类的实例来运行run方法。应该可以编写代码,这样就可以定义类并将其实例创建为一个构造。我仍然需要runOnUiThread来实际运行它,但我正在寻找一种浓缩的方式来组合类定义和实例化。我在某个地方看过,但记不起是怎么做到的: class OnRunnableCompleted implements Runnable { @Override public void run() { } } OnRunnableCompleted onRu

我想减少以下代码行。不必声明该类,然后创建该类的实例来运行run方法。应该可以编写代码,这样就可以定义类并将其实例创建为一个构造。我仍然需要runOnUiThread来实际运行它,但我正在寻找一种浓缩的方式来组合类定义和实例化。我在某个地方看过,但记不起是怎么做到的:

class OnRunnableCompleted implements Runnable
{
  @Override
  public void run()
  {
  }
}

OnRunnableCompleted onRunnableCompleted = new OnRunnableCompleted();
runOnUiThread(onRunnableCompleted);
这将创建一个实现
Runnable
接口的方法,并将抽象
run()
方法重写为no-op

匿名类的一般形式是

new Name(superCtorParam0, superCtorParam1) {
  member0;
  member1;
}
在哪里

  • Name
    是要扩展/实现的接口或类的名称
  • superCtorParam
    0…n是
    Name
    的构造函数的参数
  • member
    0…n是匿名类的字段、方法、初始值设定项、内部类,就像在任何其他类声明中一样
  • 那么

    Runnable calculatePI = new Runnable(){
        public void run(){/*calculate pi*/}
    }
    //Any time you need to calculate pi
    runOnUiThread(calculatePI);
    

    这样可以减少代码并防止重复创建匿名类。在我的android开发中,我经常使用这个解决方案。工作正常。

    在JDK 8中,您可以执行以下操作:

    yourMethod(() -> System.out.println("RUN!"));
    
    使用匿名类作为

    runOnUiThread(new Runnable() { public void run() {} });
    

    就这样。我忘了它被称为“匿名类”。JDK 8中是否存在runOnUiThread函数?我认为这是安卓系统的例子。更重要的是,OP并没有告诉任何关于Android的事情,只告诉了java.Approved,并保证Android开发没有明确规定+1“防止重复创建匿名类”是什么意思???即使重复它是一个问题,它到底有什么问题呢?如果您的GUI经常更新,这会产生更少的垃圾,并简化您的代码逻辑。我想迈克已经回答了你的匿名课堂提问。你说的“产生更少的垃圾”是什么意思?你是说匿名类会产生更多的垃圾吗?是的。如果重复快速创建,并且您的应用程序是实时的(即音频、重图形,如游戏),这是一个有意义的观察。否则就不体面了。
    runOnUiThread(new Runnable() { public void run() {} });