标签: anonymous-class

为什么在匿名类中只能访问最终变量?

  1. a只能在这里决赛.为什么?如何aonClick()不将其保留为私有成员的情况下重新分配方法?

    private void f(Button b, final int a){
        b.addClickHandler(new ClickHandler() {
    
            @Override
            public void onClick(ClickEvent event) {
                int b = a*5;
    
            }
        });
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如何5 * a点击它返回?我的意思是,

    private void f(Button b, final int a){
        b.addClickHandler(new ClickHandler() {
    
            @Override
            public void onClick(ClickEvent event) {
                 int b = a*5;
                 return b; // but return type is void 
            }
        });
    }
    
    Run Code Online (Sandbox Code Playgroud)

java event-handling anonymous-class

341
推荐指数
7
解决办法
11万
查看次数

如何在Java中使用匿名(内部)类?

Java中匿名类的用途是什么?我们可以说匿名类的使用是Java的优势之一吗?

java anonymous-inner-class anonymous-class

304
推荐指数
9
解决办法
22万
查看次数

如何将参数传递给匿名类?

是否可以传递参数或访问外部参数到匿名类?例如:

int myVariable = 1;

myButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // How would one access myVariable here?
    }
});
Run Code Online (Sandbox Code Playgroud)

有没有办法让侦听器访问myVariable或传递myVariable而不将侦听器创建为实际的命名类?

java anonymous-class

143
推荐指数
7
解决办法
9万
查看次数

从Java匿名类访问"this"

给出以下代码:

public interface Selectable {
  public void select();
}

public class Container implements Selectable {
  public void select() {
  ...
  }
  public void createAnonymousClass() {
    Selectable s = new Selectable() {
      public void select() {
        //see comment below.
      }
    };
  }
}
Run Code Online (Sandbox Code Playgroud)

我想Container.select()从我的匿名类' select()方法中访问.但是,this.select()会再次调用匿名类的select()方法.

我的建议是:

在Container中引入一个字段,例如

private Container self = this;
Run Code Online (Sandbox Code Playgroud)

现在我可以Container.select()通过self.select()在匿名类中调用来访问.

这是一种合理的方式吗?还是有更好的方法吗?

java this anonymous-class

141
推荐指数
2
解决办法
4万
查看次数

Java8 Lambdas与匿名类

由于Java8最近已经发布,并且它的全新lambda表达式看起来非常酷,我想知道这是否意味着我们习以为常的Anonymous类的消亡.

我一直在研究这个问题,并找到了一些很酷的例子,说明Lambda表达式将如何系统地替换这些类,例如Collection的sort方法,它用于获取Comparator的Anonymous实例来执行排序:

Collections.sort(personList, new Comparator<Person>(){
  public int compare(Person p1, Person p2){
    return p1.firstName.compareTo(p2.firstName);
  }
});
Run Code Online (Sandbox Code Playgroud)

现在可以使用Lambdas完成:

Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));
Run Code Online (Sandbox Code Playgroud)

而且看起来非常简洁.所以我的问题是,有没有理由继续在Java8中使用这些类而不是Lambdas?

编辑

同样的问题,但在相反的方向,使用Lambdas而不是匿名类有什么好处,因为Lambdas只能用于单个方法接口,这个新功能只是在少数情况下使用的快捷方式还是真的有用?

java lambda anonymous-class java-8

103
推荐指数
4
解决办法
6万
查看次数

91
推荐指数
4
解决办法
10万
查看次数

Java 8 Lambda表达式 - 嵌套类中的多个方法怎么样

我正在阅读以下新功能:http://www.javaworld.com/article/2078836/java-se/love-and-hate-for-java-8.html

我看到了下面的例子:

使用匿名类:

button.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent ae) {
        System.out.println("Action Detected");
    }
});
Run Code Online (Sandbox Code Playgroud)

使用Lambda:

button.addActionListener(e -> {
    System.out.println("Action Detected");
});
Run Code Online (Sandbox Code Playgroud)

MouseListener如果他们想在匿名类中实现多个方法,有人会做什么,例如:

public void mousePressed(MouseEvent e) {
    saySomething("Mouse pressed; # of clicks: "
               + e.getClickCount(), e);
}

public void mouseReleased(MouseEvent e) {
    saySomething("Mouse released; # of clicks: "
               + e.getClickCount(), e);
}
Run Code Online (Sandbox Code Playgroud)

... 等等?

java lambda anonymous-class java-8

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

我们可以在Java中创建一个接口实例吗?

是否可以在Java中创建接口实例?

在某处我读过使用内部匿名类,我们可以这样做,如下所示:

interface Test  
{  
    public void wish();  
}  
class Main  
{  
    public static void main(String[] args)  
    {  
        Test t=new Test()  
        {  
            public void wish()  
            {  
                System.out.println("output: hello how r u");  
            }  
        };  
    t.wish();  
    }  
}    

cmd> javac Main.java  
cmd> java Main  
output: hello how r u  
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?

java interface instance anonymous-class inner-classes

72
推荐指数
3
解决办法
18万
查看次数

什么是1美元的类文件名?

C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\WelcomeApplet>dir
 Volume in drive C has no label.
 Volume Serial Number is 2041-64E7

 Directory of C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\WelcomeApplet

2009-07-02  23:54              .
2009-07-02  23:54              ..
2004-09-06  14:57               582 WelcomeApplet.html
2004-09-06  15:04             1,402 WelcomeApplet.java
               2 File(s)          1,984 bytes
               2 Dir(s)   2,557,210,624 bytes free

C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\WelcomeApplet>javac WelcomeApplet.java

C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\WelcomeApplet>dir
 Volume in drive C has no label.
 Volume Serial Number is 2041-64E7

 Directory of C:\Program Files\Java\jdk1.6.0_05\CoreJava\v1\v1ch2\WelcomeApplet

2009-07-02  23:54              .
2009-07-02  23:54              ..
2009-07-02  23:54               975 WelcomeApplet$1.class
2009-07-02  23:54             1,379 WelcomeApplet.class
2004-09-06 …

java javac anonymous-class

59
推荐指数
4
解决办法
6万
查看次数

如何启动匿名线程类

我有以下代码片段:

public class A {
    public static void main(String[] arg) {
        new Thread() {
            public void run() {
                System.out.println("blah");
            }
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,如何start()在不创建线程类实例的情况下为线程调用方法?

java multithreading anonymous-class

58
推荐指数
3
解决办法
10万
查看次数