标签: anonymous-inner-class

Java lambda具有与匿名内部类不同的变量要求

我有一个匿名的内部类和一个等效的lambda.为什么变量初始化规则对lambda更严格,是否有比匿名内部类更清晰的解决方案或在构造函数中初始化它?

import java.util.concurrent.Callable;

public class Immutable {
    private final int val;

    public Immutable(int val) { this.val = val; }

    // Works fine
    private final Callable<String> anonInnerGetValString = new Callable<String>() {    
        @Override
        public String call() throws Exception {
            return String.valueOf(val);
        }
    };

    // Doesn't compile; "Variable 'val' might not have been initialized"
    private final Callable<String> lambdaGetValString = () -> String.valueOf(val);
}
Run Code Online (Sandbox Code Playgroud)

编辑:我确实遇到了一个解决方法:使用getter for val.

java lambda anonymous-inner-class

20
推荐指数
1
解决办法
1277
查看次数

在Java中访问外部类的变量

在Java android应用程序中如何从内部匿名类访问外部类的变量?例:

    ProgressDialog dialog = new ProgressDialog(this);
    .....
    send.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) {

           //here i'd like to do something with **dialog** variable
           .......

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

java anonymous-inner-class local-variables

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

如何在Eclipse中找到一个匿名内部类,只给出它的合成名称(Class $ N)?

如果我Class$N在使用Eclipse时只获得了类的名称,而没有通过代码并计算每个匿名类,我如何找到一个匿名内部类?是否有"跳转到匿名类声明"功能,我可以在其中输入$后缀号码?

Search-> Java功能没有帮助.

我正在使用VisualVM来查找CPU热点.我的热点是一个名为SomeClass $ 5的匿名类.VisualVM无法找到我的类的源代码,而我(以及其他人)无法找到如何将源附加到VisualVM,如此此处所示 .启动器插件无法解决此问题.

计算匿名声明不是一种选择,因为从长远来看,人为错误排序数百行的风险可能导致浪费大量时间试图处理错误的匿名类,只是为了发现它是错误的类.

作为一种解决方法,我正在用'System.out.println("this="+this.getClass().getName());'一种方法测试类, 以确保它是正确的,但必须有一个更好的方法.

java eclipse anonymous-inner-class visualvm

15
推荐指数
1
解决办法
1110
查看次数

re匿名内部类的多个实例

这与我在这个帖子中提供的问题的答案有关:内部类是轻量级的吗?

我记得从我的阅读中可以看出,如果你只能从一个匿名的内部类创建一个对象,那么,如果你想创建一个ActionListener类并想要从这个类中创建多个对象(不使用反射),不是使用匿名的内部类,而是使用私有的内部类或类的立场,但人们告诉我,我错了.有人可以帮我澄清一下吗?请查看链接,因为它包含更多详细信息,但如果有任何不清楚的地方,请询问!

java anonymous-inner-class

13
推荐指数
1
解决办法
2347
查看次数

Scala:具有匿名类型的抽象类

我正在阅读"Scala for the Impatient",他们在8.8中说:

[..]你可以使用abstract关键字来表示一个无法实例化的类[..]

abstract class Person { val id: Int ; var name: String }
Run Code Online (Sandbox Code Playgroud)

几行之后:

您始终可以使用匿名类型自定义抽象字段:

val fred = new Person {

  val id = 1729

  var name = "Fred"

}
Run Code Online (Sandbox Code Playgroud)

因此,他们用匿名类型人工实例化Person类.在现实世界的哪种情况下,人们会想要这样做?

scala anonymous-inner-class

13
推荐指数
1
解决办法
743
查看次数

将匿名类转换为lambda后,代码的行为会有所不同

我正在尝试重构此代码以使用lambda而不是匿名类.它是GUI中的简单项目列表.我为每个项目注册了一个不同的监听器,并且创建的最后一个项目在单击时会执行一些特殊操作.

class ItemList {
    interface OnClickListener {
        void onClick();
    }
    OnClickListener current;
    OnClickListener newListener(final int n) {
        return current = new OnClickListener() {
            public void onClick() {
                if (this == current)
                    System.out.println("doing something special (item #"+n+")");
                System.out.println("selected item #" + n);
            }
        };
    }
    public static void main(String[] args) {
        ItemList l = new ItemList();
        OnClickListener ocl1 = l.newListener(1);
        OnClickListener ocl2 = l.newListener(2);
        OnClickListener ocl3 = l.newListener(3);
        ocl1.onClick();
        ocl2.onClick();
        ocl3.onClick();
    }
}
Run Code Online (Sandbox Code Playgroud)

它按预期工作:

$ javac ItemList.java && java ItemList
selected …
Run Code Online (Sandbox Code Playgroud)

java lambda anonymous-inner-class java-8

12
推荐指数
1
解决办法
539
查看次数

Groovy - 闭包与方法 - 区别

在此输入图像描述

如果仔细查看所包含的图片,您会注意到您可以使用Eclipse IDE重构Groovy代码并将方法转换为闭包,反之亦然.那么,究竟什么是闭包呢?它与方法有何不同?有人能给出一个使用闭包的好例子,以及为什么它是一个有用的功能?匿名内部课程不够好?

groovy closures anonymous-inner-class

11
推荐指数
1
解决办法
8290
查看次数

从内部类访问变量

我有一些代码为回调处理程序定义了一个匿名内部类.这个处理程序需要分配一个局部变量,见下文.我需要resp在回调中分配并在函数结束时引用它.我在Eclipse中遇到此错误:

resp无法分配最终的局部变量,因为它是在封闭类型中定义的

我怎样才能解决这个问题?

DoorResult unlockDoor(final LockableDoor door) {
    final UnlockDoorResponse resp;
    final boolean sent = sendRequest(new UnlockDoorRequest(door), 
       new ResponseAction() {
        public void execute(Session session) 
               throws TimedOutException, RetryException, RecoverException {
            session.watch(UNLOCK_DOOR);
            resp = (UnlockDoorResponse)session.watch(UNLOCK_DOOR);
        }
    });
    DoorResult result;
    if (!sent) {
        return DoorResult.COMMS_ERROR;
    }
    else {
        return DoorResult.valueOf(resp.getResponseCode());
    }
}
Run Code Online (Sandbox Code Playgroud)

java anonymous-inner-class inner-classes

10
推荐指数
2
解决办法
1万
查看次数

你能在Swift中创建匿名内部类吗?

我已经厌倦了宣布整个课程能够UIAlertView通过延长来处理点击UIAlertViewDelegate.当我有多个可能的UIAlertViews时,它开始感到凌乱和错误,并且必须区分在处理程序中单击的内容.

我真正想要的是创建一个实现UIAlertViewDelegate协议的单个对象,并UIAlertView在显示它时将这个一次性对象提供给我.

我想要这样的东西:

let confirmDelegate = UIAlertViewDelegate() {
    func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) {
        // Handle the click for my alertView
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在显示警报时使用它:

let alertView = UIAlertView(title: "Confirm", message: "Are you sure?", delegate: confirmDelegate, cancelButtonTitle: "No", otherButtonTitles: "Yes")
alertView.show()
Run Code Online (Sandbox Code Playgroud)

如果没有宣布新课程,这可能吗?

我知道我可以这样做:

class ConfirmDelegate: UIAlertViewDelegate {
    func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex: Int) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

然后实例化一个ConfirmDelegate(),但我只是想知道这是否可能作为单线类声明和实例化.

anonymous-inner-class uialertview ios uialertviewdelegate swift

10
推荐指数
1
解决办法
4563
查看次数

LeakCanary通过匿名实现locationlistener报告泄露的活动实例

在onDestroy中

locationManager.removeUpdates(locationListener);
locationListener = null;
Run Code Online (Sandbox Code Playgroud)

匿名实现

locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        if (locationManager != null) {
            locationListener = new LocationListener() {
                @Override
                public void onLocationChanged(Location location) {
                    if (chatId != null) {
                        double radius = 6378.137;
                        double oldLat = mLastLocation.getLatitude();
                        double oldLng = mLastLocation.getLongitude();
                        double newLat = location.getLatitude();
                        double newLng = location.getLongitude();
                        double dLat = Math.toRadians(newLat - oldLat);
                        double dLng = Math.toRadians(newLng - oldLng);
                        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
                                + Math.cos(Math.toRadians(oldLat))
                                * Math.cos(Math.toRadians(newLat)) * Math.sin(dLng / …
Run Code Online (Sandbox Code Playgroud)

android memory-leaks anonymous-inner-class leakcanary

9
推荐指数
1
解决办法
773
查看次数