`

匿名类中this的特殊用法(class.this)

阅读更多
今天中午趁休息时间玩了玩android发现这样的一段代码

package com.lidongbo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MyActivity extends BaseActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button=(Button)findViewById(R.id.Button01);
        button.setOnClickListener(backOnClickListener);
    }
    
    private Button.OnClickListener backOnClickListener=new Button.OnClickListener() {
    	public void onClick(View v) {
    		MyActivity.this.setResult(RESULT_OK, intent);
		MyActivity.this.finish();
		}
    };
}



从以上代码中可见MyActivity.this的用法,平时一直搞J2EE也没注意过这种写法,来了兴趣,网上找了找,没找到有用的信息(和目前搜索引擎和自己描述有关),自己尝试豁然晓得了,写个例子总结下


上班时间时间紧举不出什么好的例子来




package lidongbo.test;

public class Water {

	public void wash(){
	}
	
	public void run(){
		System.out.println("Water run");
	}
	
	public static void byDrink (People man){
		//...
	}
}





package lidongbo.test;

public class People {

	public void talk(){
		System.out.println("talk");
	}
	

	public void run(){
		System.out.println("People run");
	}
	
	public void drink(){
		People.this.talk();
		
		new Water(){
			void play(){
				talk();//默认得到全部的(包括Water和People的)
				this.wash();//直接this.只得到Water
				People.this.talk();
				byDrink(People.this);//默认得到全部但是需要传递People引用,就要使用People.this
				run();
				this.run();
				People.this.run();//如果想调用People的run方法,就要用People.this
			}
		}.play();
		
	}
	
	
	public static void main(String[] args) {
		
		People man=new People();
		man.drink();
		
	}
	
}






在People.eat()里面如果不用People.this那么得到this指向的是匿名的Water,这样就可以区分两个不通的this,和两个实例下的同名方法了

2
1
分享到:
评论
3 楼 gzzjsoft 2013-06-10  
我就是其中不幸的人之一
Mybeautiful 写道
呵呵,这个问题很多人都搞不清白。 至少我碰见的10个至少有9个人不知道这个方法,以至与内部类与外部类有一样的方法时,不知道在内部类中调用外部类的那个方法。

2 楼 ldbjakyo 2010-10-22  
Mybeautiful 写道
呵呵,这个问题很多人都搞不清白。 至少我碰见的10个至少有9个人不知道这个方法,以至与内部类与外部类有一样的方法时,不知道在内部类中调用外部类的那个方法。

1 楼 Mybeautiful 2010-10-22  
呵呵,这个问题很多人都搞不清白。 至少我碰见的10个至少有9个人不知道这个方法,以至与内部类与外部类有一样的方法时,不知道在内部类中调用外部类的那个方法。

相关推荐

    java(Day12)---内部类

    成员内部类 定义的位置:类中,方法以外 静态内部类 定义的位置:类中,方法以外 局部内部类 定义的位置:方法中 匿名内部类 定义的位置:值或实参中 ...外部类类名.this.属性名:外部类属性 This.属性名:内部类属性

    Cocos-Creator开发(来自于网络).pdf

    1.9 This......................................................................................................................................14 1.10 运算符 ..............................................

    Linux多线程服务端编程:使用muduo C++网络库

    《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    超实用的android自定义log日志输出工具类

    1 在LogUtlis方法的第一个参数中填this可以输出当前类的名称,特别是在匿名内部类使用也可以输出当前类名。 如 : LogUtils.i(this,”这是一个实用的日志工具类”) 或 LogUtils.i(类名.class,”这是一个实用的日志...

    egret工具:事件监听管理器

    BC.addEvent(this, this.dispatchSprite, egret.Event.ENTER_FRAME, DelegateUtil.create(this, this.onEnterFrame, "新来的!")); setTimeout(() => { //移除所有该类的监听 BC.removeEvent(this); console....

    scala从入门到精通技术教学视频

    08.匿名内部类 09.动物类案例 第八章 特质 00.导学 01.类继承单个特质 02.类继承多个特质 03.单例对象继承特质 04.演示trait中的成员 05.动态混入trait 06.使用trait实现适配器设计模式 07.使用trait实现...

    PHP7匿名类的用法示例

    本文实例讲述了PHP7匿名类的用法。分享给大家供大家参考,具体如下: <?php /** * Created by PhpStorm. * User: Itboot * Date: 2019/1/17 * Time: 18:15 */ class An { private $num; protected $age =...

    Android实验5-事件处理答案.doc

    //匿名内部类 btn3.setOnClickListener(new OnClickListener(){ public void onClick(View v) { txt.setText("匿名内部类"); } }); } //直接绑定到标签 public void clickHandler(View source){ EditText et = ...

    javaSE代码实例

    9.3.4 接口中方法无法使用的修饰符 165 9.4 接口与抽象类 166 9.4.1 语法上的不同 167 9.4.2 具体含义的不同 167 9.5 基于接口的多态 169 9.6 接口与回调 170 9.7 instanceof的使用 172 9.7.1 基本...

    【05-面向对象(下)】

    •如果希望获得包装类对象中包装的基本类型变量,则可以使用包装类提供的XxxValue()实例方法。 自动装箱与自动拆箱 •JDk还提供了自动装箱和自动拆箱。自动装箱就是把一个基本类型的变量直接赋给对应的...

    java认证所有课程

    每个事件都有一个对应的监听者接口,规定哪些方法必须在适合接收那种类型的事件的类中定义。实现了定义那些方法的接口的类可以注册为一个监听者。 9.4.2 委托模型 从没有注册的监听者的组件中发出的事件不会被传播...

    新手学习C++入门资料

    在C语言中,输入输出是使用语句scanf()和printf()来实现的,而C++中是使用类来实现的。 #include iostream.h main() //C++中main()函数默认为int型,而C语言中默认为void型。 { int a; cout; cin>>a; /*输入...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法...

    Java学习题答案

    Anonymous Inner Class (匿名内部类) 可以extends(继承)其它类 13 final类是为防止他人从你的类上派生新类,此类是不可继承的。 14 super()和this()方法只能在构造函数里调用. 15 方法的参数变量不能是...

    [原创]自己工作中常用的模板库,简化你的工作

    这上传的资源中包含一套我工作中常用的模板库,及不需要MFC支持的excel操作接口,导出函数调用栈(dump stack)接口,可以直接用VS2008运行TestCodeLib.sln来根据unit test来了解用法。 ⑴ 需求(requirements) 重量级...

    Java开发详解.zip

    031502_【第15章:Java反射机制】_Class类的使用笔记.pdf 031503_【第15章:Java反射机制】_反射应用——取得类的结构笔记.pdf 031504_【第15章:Java反射机制】_Java反射机制的深入研究笔记.pdf 031505_【第15章:...

    java编程基础,应用与实例

    10.4 匿名类(anonymous class) 152 10.5 巩固练习 153 第11章 异常处理(exception handing) 154 11.1 try-catch语句 154 11.2 Exception类的种类 157 11.3 可抛出异常的方法 158 11.4 自定义异常 161...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法...

    jquery插件使用方法大全

    许多较少使用的方法被合并,减少了需要掌握和解释的方法数量。 jQuery 1.1.3(2007年7月):这次小版本变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始,jQuery的性能达到了Prototype、Mootools...

Global site tag (gtag.js) - Google Analytics