您的位置:首页 > 编程语言 > Java开发

Java 闭包机制

2015-11-01 19:47 288 查看
java闭包机制,它的实现需要两个部分闭包类(暂时称呼)+接口。闭包类:它是一个可以被调用的对象。它包含了一些作用域的内容(可以是参数,方法),它会自动拥有一个指向外部类的引用,通过它可以访问外部类的私有成员。

闭包机制可以解决,同一个方法做不同的操作的问题。

案例来自于这里写链接内容

一个Teachable接口和Programmer基类都提供了一个work方法,方法签名完全一样,功能不一样。Teachable的work方法用来执行教学,Programmer的work用来执行编程。那么假如有一个人既是教师又是程序员,也就是需要定义一个类既继承Programmer父类又要实现Teachable,问题在于这个类只能定义一个work方法,那怎么去实现这个需求呢,这里就可以利用内部类可以访问外部类的私有成员的特点来解决这个问题

Teachable接口

package com.home;
/**执行工作的方式*/
public interface Teachable {
public void work();
}


Programmer:

package com.home;

public class Programmer {
private String name;

public Programmer() {
super();
}

public Programmer(String name) {
super();
this.name = name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
/*工作是----正在编程*/
public void work() {
System.out.println(name + "正在编程");
}
}


一个既编程又教书的类

package com.home;

public class TeachableProgrammer extends Programmer
{

public TeachableProgrammer() {
super();
}

public TeachableProgrammer(String name) {
super(name);//继承父类的name参数 既引用了父类的name参数
}

// 工作方式教学---教学工作任然由TeachableProgrammer定义
private void teach() {
System.out.println(getName() + "正在讲课");
}
/*内部类实现工作方式的接口 执行不同的工作方式*/
private class Closure implements Teachable {
@Override
public void work() {
// 非静态内部类实现Teachable的work方法,作用仅仅是向客户类提供一个回调外部类的途径
teach();
}
}
// 返回一个非静态内部类的引用,允许外部类通过该引用来回调外部类的方法
public Teachable getCallbackReference() {
return new Closure();
}
}


测试代码

package com.home;

public class TestClosure {

public static void main(String[] args) {
TeachableProgrammer tp = new TeachableProgrammer("XX");/
// 直接调用TeachableProgrammer从Programmer类继承下来的work方法
tp.work();
// 表明上看是调用的Closure的work方法,实际上是通过通过work方法回调TeachableProgrammer的teach方法
//改变了work方法的执行内容
tp.getCallbackReference().work();
}

}


A:接口 定义一个要执行的方法

B:类 具有和接口一致的方法,但拥有自己功能

C:类 继承A类在其内定义一个内部类D 并且提供一个内部类的引用

D:内部类 实现接口A 调用接口中的方法,在方法中做自己的功能,例如回调外部类的方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: