Tag: anonymous class

Java:使用局部变量的匿名内部类

如何在我的匿名内部子类中获取传递给此方法的userId的值? public void doStuff(String userID) { doOtherStuff(userID, new SuccessDelegate() { @Override public void onSuccess() { Log.e(TAG, “Called delegate!!!! “+ userID); } }); } 我收到此错误: 不能在不同方法中定义的内部类中引用非最终变量userID 我很确定我不能将它指定为final,因为它是一个具有未知值的变量。 我听说这种语法确实以某种方式保留了范围,所以我认为必须有一个我还不太了解的语法技巧。

为什么匿名类不能直接实现多个接口? 仅仅因为语法还是有另一个原因?

在那里有一个内部问题,为什么java匿名类不能同时实现和子类? 或者只是因为语法?

匿名接口实现

我读过’ C#匿名实现接口(或抽象类) ‘线程,用于匿名实现接口。 但我想知道使用.NET 2.0(NO LINQ)使用委托或任何类似的方法是否也可以。 我从JAVA了解到以下可能: MyClass m = MyMethod(new MyInterface() { @override public void doSomething() {…} } (我希望我记得很清楚,就在不久之前我使用过JAVA,但我想这是类似的东西)。 每当方法需要一个接口实例并且只调用一次时,这可能会有所帮助,因此不需要为这种方法创建一个新类。

C#相当于创建实现接口的匿名类

我最近开始使用C#,我想找到一个等效的方法。 我不知道这叫什么,所以我只会通过代码向您展示。 使用Java,我能够创建如下界面: public interface Event { public void execute(); } 并在方法的参数中传递此接口,如下所示: public class TestEvent { ArrayList eventList = new ArrayList(); 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(); } } 编辑 :我的问题是来自TestEvent类的simulatEvent方法,如果C#可以执行这样的操作。 我想知道是否有办法用C#做一些类似的事情(在simulateEvent方法中实例化接口)以及实际调用它的方法。 谢谢!

匿名类上的NotSerializableException

我有一个过滤项目的界面: public interface KeyValFilter extends Serializable{ public static final long serialVersionUID = 7069537470113689475L; public boolean acceptKey(String iKey, Iterable iValues); public boolean acceptValue(String iKey, String value); } 以及包含KeyValFilter类型成员的类。 public class KeyValFilterCollector extends KeyValCollectorSkeleton { /** * */ private static final long serialVersionUID = -3364382369044221888L; KeyValFilter filter; public KeyValFilterCollector(KeyValFilter filter){ this.filter=filter; } 当我尝试使用实现KeyValFilter的匿名类启动KeyValFilterCollector时: new KeyValFilterCollector(new KeyValFilter(){ private […]

从ScheduledExecutorService中运行的任务本身中停止定期任务

在ScheduledExecutorService中运行时,是否有一种很好的方法可以阻止任务内部重复任务? 可以说,我有以下任务: Future f = scheduledExecutor.scheduleAtFixedRate(new Runnable() { int count = 0; public void run() { System.out.println(count++); if (count == 10) { // ??? cancel self } } }, 1, 1, TimeUnit.SECONDS); 从外面看,很容易通过f.cancel()取消,但是如何在指定的地方停止重复? (通过AtomicReference传递Future是不安全的,因为当scheduleAtFixedRate返回f迟到并且变量设置得太晚时有一个潜在的窗口,并且任务本身可能已经运行,在引用中看到null。)

对内部类的局部变量访问需要声明为final

我遇到了一个局部变量访问内部类的问题,需要声明final。 它来自方法createGrids() – >“ squares[i][j] = 0; ”我是一个需要声明为final的局部变量。 我不知道为什么,我在字段中添加了final,但它不能正常工作。 import java.util.ArrayList; import java.util.Random; //省略 public class Minesweeper{ private JFrame frame; private int cols = 9; private int rows = 9; public static final int GRID_HEIGHT = 9; public static final int GRID_WIDTH = 9; final JButton[][] grids = new JButton[GRID_WIDTH][GRID_HEIGHT]; final int [][] squares = […]

这是一个匿名内部类的变体吗?

这是一个例子 JPanel panel = new JPanel(){ @Override protected void paintComponent(Graphics g){ // do stuff } @Override public Dimension getPreferredSize(){ // do stuff } }; 这只是一个匿名内部类的变体,还是完全不同的东西?

在匿名类中测试方法时,如何使用Powermockito来模拟新对象的构造?

我想写一个JUnit测试来validation下面的代码使用BufferedInputStream: public static final FilterFactory BZIP2_FACTORY = new FilterFactory() { public InputStream makeFilter(InputStream in) { // a lot of other code removed for clarity BufferedInputStream buffer = new BufferedInputStream(in); return new CBZip2InputStream(buffer); } }; (FilterFactory是一个接口。) 到目前为止我的测试看起来像这样: @Test public void testBZIP2_FactoryUsesBufferedInputStream() throws Throwable { InputStream in = mock(InputStream.class); BufferedInputStream buffer = mock(BufferedInputStream.class); CBZip2InputStream expected = mock(CBZip2InputStream.class); […]

匿名类*总是*保持对其封闭实例的引用吗?

我正在使用一些代码,其中一个对象“foo”正在创建另一个对象“bar”,并将其传递给Callable 。 在此foo之后将返回bar,然后我希望foo变得无法访问(即:可用于垃圾收集)。 我最初的想法是匿名创建Callable 。 例如: class Foo { … public Bar createBar() { final int arg1 = … final int arg2 = … final int arg3 = … return new Callable() { @Override public Baz call() { return new Baz(arg1, arg2, arg3); } }; } } 在我看来,这可能实际上并不按预期工作,因为内部类通常保持对其封闭对象的引用。 我不希望在这里引用封闭类,因为我希望在Callable仍可访问时收集封闭对象。 另一方面,检测到实际上从未引用封闭实例应该是非常简单的,因此Java编译器可能足够聪明,在这种情况下不包括引用。 那么……一个匿名内部类的实例是否会持有对其封闭实例的引用,即使它实际上从未使用封闭的实例引用?