标签: anonymous-class

Android Studio / IntelliJ 匿名类格式

我想知道是否可以更改 Android Studio 中的自动格式,将匿名类的大括号放置在同一行,同时仍将常规类、方法和块的大括号放置在新行上。

目前,IntelliJ 给了我这个结果:

class TestClass
{
    public void test()
    {
        FooBar foo = new FooBar(new Runnable() // I want the brace here...
        { // ...not here.
            @Override
            public void run()
            {
                //
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望代码的格式如下:

class TestClass
{
    public void test()
    {
        FooBar foo = new FooBar(new Runnable() { // <- Same Line
            @Override
            public void run()
            {
                //
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,除了一个细节,即我无法像第二个示例中那样格式化大括号。这是不可能的还是我只是忽略了设置?

code-formatting intellij-idea anonymous-class android-studio

6
推荐指数
1
解决办法
1519
查看次数

实现ActionListener的Java匿名类?

我最近做了一个编程任务,要求我们在代码中实现一个由UML图指定的程序.有一次,该图指定我必须创建一个显示计数(从1开始)的匿名JButton,并在每次单击时递减.JButton及其ActionListener都必须是匿名的.

我提出了以下解决方案:

public static void main(String[] args) {
  JFrame f = new JFrame("frame");
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  f.setSize(400, 400);

  f.getContentPane().add(new JButton() {

    public int counter;

    {
      this.counter = 1;
      this.setBackground(Color.ORANGE);
      this.setText(this.counter + "");

      this.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
          counter --;
          setText(counter + "");
        }
      });

    }
  });

  f.setVisible(true);

}
Run Code Online (Sandbox Code Playgroud)

这会添加一个匿名的JButton,然后添加另一个(内部)匿名ActionListener来处理事件并根据需要更新按钮的文本.有更好的解决方案吗?我很确定我不能宣布匿名JButton implements ActionListener (),但还有另一种更优雅的方法来实现相同的结果吗?

java anonymous-class

5
推荐指数
1
解决办法
3万
查看次数

组织回调的首选方式是什么?

在我的Android项目中,我定义了一些回调来对按钮单击,连接事件或UI事件(例如Dilaog.onShow())进行操作。出于演示目的,我选择了必须从一些Activity代码启动的Runnable接口。使用Java,我有不同的表达方式。

一种模式是使用匿名类

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

private void doSomething() {
}
Run Code Online (Sandbox Code Playgroud)

另一个-定义内部私有类,即

private DoSomething implements Runnable {
    public void run() { 
        // do something; 
    }
}
...
runOnUiThread(new DoSomething());
Run Code Online (Sandbox Code Playgroud)

还有一个-使用私有成员,例如:

private final Runnable doSomething = new Runnable() {
    public void run() { 
        // do something; 
    }
}
...
runOnUiThread(doSomething);
Run Code Online (Sandbox Code Playgroud)

这是我最喜欢的另一个,因为一方面,除非有人真正使用它,否则它实际上不会构造对象;因为它避免了多余的类,因为它可以在需要时使用参数。

private Runnable doSomething() { 
    return new Runnable() {
        public void run() { 
            // do something; 
        }
    }
}
...
runOnUiThread(doSomething());
Run Code Online (Sandbox Code Playgroud)

我不是在寻找关于品味或宗教信仰的争论,而是在寻找代码的可维护性和性能。我想收到一些提示和建议,这些建议可以帮助我发展自己的偏爱,可能-根据给定的情况选择不同的偏爱。

扰流板:

Java的进步使这个问题过时了,​​请参见已接受的答案。

java lambda coding-style anonymous-class private-class

5
推荐指数
1
解决办法
460
查看次数

如何扩展匿名类的对象

我有班级方法:

public object MyMethod(object obj)
{
   // I want to add some new properties example "AddedProperty = true"
   // What must be here?
   // ...

   return extendedObject;
}
Run Code Online (Sandbox Code Playgroud)

和:

var extendedObject = this.MyMethod( new {
   FirstProperty = "abcd",
   SecondProperty = 100 
});
Run Code Online (Sandbox Code Playgroud)

现在,extendedObject具有新属性.请帮忙.

c# anonymous-class

5
推荐指数
1
解决办法
8307
查看次数

C#等效于创建实现接口的匿名类

我最近开始使用C#,并且我想找到与此等效的方法。我不知道这叫什么,所以我将简单地通过代码向您展示。

使用Java,我能够创建如下接口:

public interface Event {
    public void execute();
}
Run Code Online (Sandbox Code Playgroud)

并在方法的参数中传递此接口,如下所示:

public class TestEvent {
    ArrayList<Event> eventList = new ArrayList<Event>();

    public void addEvent(Event event){
        eventList.add(event);
    }

    public void simulateEvent(){
        addEvent(new Event() {
            public void execute(){
                //functionality
            }
        } );
    }

    public void processEvents(){
        for(Event event : eventList)
            eventList.execute();
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我的问题是关于类中的simulatEvent方法的TestEvent,如果使用C#可以进行这样的操作。

我想知道是否有一种方法可以使用C#执行类似的操作(实例化simulateEvent方法中的接口),以及这实际上是什么。谢谢!

c# java interface anonymous-class

5
推荐指数
1
解决办法
1344
查看次数

为两个或更多方法实现匿名类

这是来自oracle关于我正在阅读的匿名类的文章:

如果必须实现包含两个或更多方法的接口,则匿名类是理想的

我认为如果你必须实现少于两个方法,这是理想的,因为你不需要创建更具体的命名类,但如果你必须实现两个以上将更难以理解.

我的问题是:为什么要用2种或更多方法实现匿名类是理想的?

java anonymous-class java-8

5
推荐指数
1
解决办法
1182
查看次数

java动作监听器:实现vs匿名类

我正在尝试自学Java并且有一个我到目前为止无法回答的问题.在我的一些在线阅读中,我发现了两种使用动作监听器的方法,它们似乎做同样的事情.但我试图找出一个优于另一个的优势/劣势.

使用这样的匿名类是否更好:

public MyClass() {
...
    myButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e) {
            //doSomething
        }
    });
...
}
Run Code Online (Sandbox Code Playgroud)

或者最好是在类的开头实现,如下所示:

public MyClass() implements ActionListener {
...
    myButton.addActionListener(this);

    public void actionPerformed(ActionEvent e) {
        //doSomething
    }
...
}
Run Code Online (Sandbox Code Playgroud)

java event-handling anonymous-class actionlistener implements

5
推荐指数
1
解决办法
2367
查看次数

匿名类字段访问Java 1.8与旧版本的兼容性

在Java 1.8上,您不必定义一个字段,因为final它可以从匿名类中获取.

例如,在旧版本上:

public void foo(final int bar) {
  new Runnable() {
    public void run() {
      System.out.println(bar);
    }
  };
}
Run Code Online (Sandbox Code Playgroud)

但是,现在,在Java 1.8上,bar不需要是最终的:

public void foo(int bar) {
  new Runnable() {
    public void run() {
      System.out.println(bar);
    }
  };
}
Run Code Online (Sandbox Code Playgroud)

所以,如果我编译我的项目,并且我正在使用的Java 1.8上实现的唯一资源就是这个(我没有使用任何lambdas,新类等),我的代码是否可以在具有较旧Java版本的计算机上执行?如果没有,为什么?

java final anonymous-class java-8

5
推荐指数
1
解决办法
674
查看次数

从匿名类访问父类时解决歧义

我最近碰到了这样的事情......

public final class Foo<T>
implements Iterable<T> {

    //...

    public void remove(T t) { /* banana banana banana */ }

    //...

    public Iterator<T> Iterator {
        return new Iterator<T>() {

            //...

            @Override
            public void remove(T t) {
                // here, 'this' references our anonymous class...
                // 'remove' references this method...
                // so how can we access Foo's remove method?           
            }

            //...

        };
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么方法可以做我正在尝试的同时保持这个匿名课程?或者我们必须使用内部类或其他东西?

java anonymous-class

5
推荐指数
1
解决办法
374
查看次数

在Kotlin中匿名实现接口会导致"没有构造函数"错误

我正在尝试在Android中使用SurfaceView来保存相机预览.文档告诉我,我需要在表面持有者的surfaceCreated回调中调用startPreview.我正试图像这样设置回调

this.surface!!.holder!!.addCallback(SurfaceHolder.Callback() {
    fun surfaceChanged(holder: SurfaceHolder, format: Int, 
                       width: Int, height: Int) {

    }

    fun surfaceCreated(holder: SurfaceHolder) {

    }

    fun surfaceDestroyed(holder: SurfaceHolder) {

    }
})
Run Code Online (Sandbox Code Playgroud)

但是,我收到错误:

SurfaceHolder.Callback没有构造函数.

我很困惑为什么当这样的事情发生时这不起作用:

Thread(Runnable() {
    fun run() {
        ...        
    }
})
Run Code Online (Sandbox Code Playgroud)

constructor compiler-errors interface anonymous-class kotlin

5
推荐指数
1
解决办法
1275
查看次数