对象-匿名内部类怎么获取外部外部局部变量

问题描述

匿名内部类怎么获取外部外部局部变量

public class test {
// public String name;
public void say(String name) {
new RunnableWithReturn() {

        @Override
        public Object execute() {
            System.out.println(name);
            return null;
        }
    };
}

}

interface RunnableWithReturn {

public abstract Object execute();

}

解决方案

// public String name;
public void say(final String name) {
new RunnableWithReturn() {
@Override
public Object execute() {
System.out.println(name);
return null;
}
};
}

添加参数 final

解决方案二:

匿名类可以直接访问所在环境的局部变量,也能访问类的成员变量的。只是你的测试代码有问题。
修正下你的测试类:

 public class Test {

    public String name;
    public Test(String name){
        this.name = name;
    }

    public void say() {
        String value = "ling";
        RunnableWithReturn t= new RunnableWithReturn() {
            @Override
            public Object execute() {
                System.out.println("访问局部变量:"+value);
                System.out.println("访问成员变量:"+name);
                return null;
            }
        };

        t.execute();
    }

    public static void main(String[] args) {
        new Test("wang").say();
    }
}

一楼说的用final是在匿名线程中访问外部环境的局部变量时,需要定义为final类型,因为局部变量在线程中运行时脱离了它的原来创建环境,有可能生存周期超过原来的创建线程,所以java语法规定必须用final修正。

时间: 2024-10-25 02:13:49

对象-匿名内部类怎么获取外部外部局部变量的相关文章

java-如何运用Scanner对象一次获取两个变量?

问题描述 如何运用Scanner对象一次获取两个变量? 以下为控制窗显示的内容: 请输入年份和月份(格式2000 1): ---------------分割线 如果用户输入2008 1的话,将2008储存到year变量,1储存到month变量. 获取用户输入使用Scanner对象完成的. 请教以下大家该如何实现. 解决方案 连续用2个nextInt()方法接收year和month. 或者用nextLine()方法接收字符串然后自己拆分出year和month java好像没有想scnaf()这样的

如何配置Ceph对象存储作为KVM虚拟机外部存储

凭借良好的可扩展性以及价格优势,Ceph对象存储在KVM虚拟机存储领域逐渐流行起来. 对象存储最初来自于云环境,因为相比于其他环境,云环境对于存储可扩展性需求通常更高.而Ceph对象存储现在是配置KVM虚拟机外部存储最为流行的一种方式. 对于Ceph来说,同一集群中的多个结点协同工作,用户可以访问位于通用硬件的分布式存储系统.通过访问由ceph-mon结点提供的元数据信息,不同类型的客户端可以连接到这些存储结点. 对象存储是一种全新的存储类型:应用程序可以通过调用API直接访问存储,这意味着应用

如何获取网站外部链接有效方法

第一:目录提交. 这算是真正有效的方法,目录提交创建的廉价,基本上是长期性的,虽然谷歌对目录网站的权重日趋下降,但由于这一时期内的目录站之间权重不同,虽然总体权重日趋下降,但部分目录网站依然保持着高权重性.而且目录网站的链接导航作为一种原始功能,自然更有利的网站外链的增加!哪里有英文网站免费的目录提交呢?这里给大家分享两个工具,一个众所周知的国外网站管理员论坛digitalpoints.此外在pw,dz,dede等一些论坛也相应开展一些目录导航功能,但前提是我们的网站必须对于导航分类有切合度,一

php 获取网页外部链接正则表达式

 代码如下 复制代码 preg_match_all("/<a(.*?)href=(.*?)</a>/i",$webContent,$link);  $urls =array();  foreach($link[0] as $value)  {   if(strstr($value,'http') )   {    if(strstr($value, $ex[3]) || strstr( $value,$ex[0]) || strstr($value,$ex[1]) |

对象-关于解决获取ueditor被选元素的旁门左道

问题描述 关于解决获取ueditor被选元素的旁门左道 第一步,打开ueditor.all.js,找到关于元素路径这一段,在里面加上这个被选元素的ID或是其它的唯一标识,以"元素的ID..."的形式追加到name变量中,让这个元素的属性一同在元素路径中保存起来. 第二步,借助Jquery来寻找这个,请取它保存的内容.我在这里为添加了一个新属性"spantype='newDiv'".你要用.last()最得到最终的对象. 第三步,用$("iframe的id&

axis webservice接口传递对象形式报文获取

问题描述 axiswebservice接口传递对象形式,报文怎么获取,需要将req和res的xml报文存入数据库日志表中,怎么用代码获取具体的报文.报文很复杂,手工拼接成xml太麻烦.知道可以用自定义handler拦截取得报文,但是request和response拦截是在不同的handler中,有啥方法能实现吗,服务端和客户端都需要req和res存日志. 解决方案

java-Java中为什么匿名对象中方法,调用局部变量必须加final呢,求详解

问题描述 Java中为什么匿名对象中方法,调用局部变量必须加final呢,求详解 Java中为什么匿名对象中方法,调用局部变量必须加final呢,求详解.在网上找了很久,基本没看到想要的答案,最好从Java虚拟机内存分配角度讲一讲,其他角度亦可. 老师只告诉这么用就好了,问了也说不知道,匿名对象在哪没研究过 求大神回复 解决方案 为什么匿名内部类调用的方法内局部变量必须为final为什么匿名内部类调用的方法内局部变量必须为final为什么匿名内部类调用的方法内局部变量必须为final 解决方案二

Delphi中的TWebBrowser与MSHTML(1): 从TWebBrowser获取DOM中的window对象

借助 TWebBrowser 可以把软件做的更漂亮.更灵活, 很多软件已经或者早就这样做了. 尽管 HTML DOM 内容繁杂(涉及到 HTML.JavaScript.CSS), 但也都属于 TWebBrowser 的功能范围. 使用 TWebBrowser 时, 如果配合上 MSHTML, 将会有很好的代码提示; 不然也可以, 就是写代码困难. HTML DOM 中的一切都是源于一个叫 window 对象, 为了和 JS 中的 DOM 一致起来, 本次先获取这个对象. TWebBrowser

JS加载器如何动态加载外部js文件_javascript技巧

今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js var MiniSite=new Object(); /** * 判断浏览器 */ MiniSite.Browser={ ie:/msie/.test(window.navigator.userAgent.toLowerCase()), moz:/gecko/.test(window.navigator.userAgent.toLowerCase()), opera:/opera/.test(windo