闭包,就不多说了,很多语言都支持。听说Java1.7,也会在这方面做新功能。
今天,就先看看俺用内部类,实现的闭包吧!
先写个接口出来:
package com.lippeng;
/**
* 随便定义一个接口,里面有个方法
*
* @author lippeng
*
*/
public interface Isayer {
public void say();
}
今天的主题,闭包内部的实现:
package com.lippeng;
/**
* 这个类做成单例的,但是,不提供等到这个类的对象的方法
*
* 即,在本類的外部,無法得到這個類的實例
*
* @author lippeng
*
*/
public class HelloWorld {
// 偷个懒,直接负值了
private static HelloWorld helloWorld = new HelloWorld("default string");
// 看好了,这个东西,是HelloWorld的属性
private String word;
/**
* Constructor
*
* @param word
*/
private HelloWorld(String word) {
this.word = word;
}
private class Recorder implements Isayer {
@Override
public void say() {
// 打出 外部类的属性
System.out.println(word);
}
}
private class Recorder2 implements Isayer {
@Override
public void say() {
// 倒序打出外部类的属性
System.out.println(new StringBuffer(word).reverse().toString());
}
}
/**
* 这个方法,只是得到一个内部类对象
*
* @return
*/
public static Isayer getSayer() {
// 根据需要,这里可以 这样写,参数想从外部传过来,也很简单
//return new HelloWorld("").new Recorder();
return helloWorld.new Recorder();
}
public static Isayer getReverseSayer() {
return helloWorld.new Recorder2();
}
/**
* 如果不提供这个方法,HelloWorld 就是完全封闭的环境了
*
* @param word
*/
public static void setWord(String word) {
helloWorld.word = word;
}
}
写个测试类看看:
package com.lippeng;
public class TestClosure {
/**
* @param args
*/
public static void main(String[] args) {
// 得到 接口:它的好处是,helloWorld对象完全可见
Isayer recorder = HelloWorld.getSayer();
recorder.say();// 这里说出来的东西,来自 helloWorld 对象
// 只是这样,好处还不明显,看下面的
// 想说的是,同一个接口,实现不同的功能
Isayer reverseSayer = HelloWorld.getReverseSayer();
reverseSayer.say();
System.out.println("---------------------");
// 改变下 HelloWorld 的属性值
HelloWorld.setWord("Hello World");
// 打出来看看
recorder.say();
reverseSayer.say();
System.out.println("---------------------");
System.out.println("变了,真的变了,闭包实现了。。。");
}
}
俺习惯在代码中加注释,不喜欢旁白。。。
分享到:
相关推荐
【标题】"helloworld-jsp-3.0.4.zip" 指向的是一个包含JSP(JavaServer Pages)示例程序的压缩文件,版本为3.0.4。JSP是Java平台上的动态网页技术,允许开发人员在HTML或XML文档中嵌入Java代码,从而实现服务器端的...
- **函数式编程**:Scala支持高阶函数、闭包和模式匹配等函数式编程特性,这些在Java中需要借助额外的库或Java 8及以上版本的Lambda表达式实现。 - **案例类和模式匹配**:Scala的案例类和模式匹配提供了处理数据...
无论是作为嵌入式脚本快速实现功能,还是作为类库扩展Java项目,或者是在Grails或Spring Boot框架中使用,Groovy都能为Java开发者带来诸多便利。掌握Groovy的这些使用方式,能帮助开发者更好地适应现代Java开发环境...
Closure3('Hello world', 1) // 输出 'Hello world : 1' // 使用变量的闭包 def var = "Hello world" def Closure4 = { println var } Closure4() // 输出 'Hello world' ``` 闭包在Groovy中广泛应用,可以用于函数...
动态方法调用则允许你使用Groovy的语法糖,比如调用`System.out.println("Hello, World!")`,这里的`println`实际上是Java中的`print`和`println`方法的结合。 在"groovy-se-study"项目中,你可能能看到如何在...
println 'Hello, World!' } sayHello // 没有括号 ``` 2. **动态特性**:Groovy是动态类型的,这意味着变量的类型在运行时确定,不需要在声明时指定。这种灵活性允许快速开发和原型设计,但可能导致运行时错误...
对于条件语句,如`if`,我们可以使用`find`、`any`或`collect`等方法结合闭包来实现。比如查找数组中的偶数: ```groovy def numbers = [1, 2, 3, 4, 5] def evenNumbers = numbers.findAll { it % 2 == 0 } // ...
fmt.Fprint(w, "Hello, world!") }) http.ListenAndServe(":8080", nil) } ``` 这段代码创建了一个监听在8080端口的HTTP服务器。其中`http.HandleFunc`用于注册处理函数,而`http.ListenAndServe`则启动...
闭包是Groovy的核心特性之一,可以用来实现函数式编程风格。闭包可以捕获并操作其所在上下文的变量,提供了强大的功能和灵活性。 Groovy的字符串处理也有其特色。单引号括起的字符串与Java中的String相同,而双引号...
2. **创建Java类和方法**:在服务器端,我们会有一个简单的Java类,比如`HelloWorld`,包含一个`sayHello()`方法,这个方法会被暴露给JavaScript调用。 3. **生成JavaScript接口**:DWR会自动生成对应的JavaScript...
- 字符串拼接使用`+`运算符,例如`"Hello," + " World!"`。 - 字符串格式化可以使用`String.format()`方法,或者直接在双引号字符串中使用`%`占位符。 - Groovy还支持多行字符串,使用三引号`"""`包裹。 2. **...
3. **运行Groovy脚本**:右键点击`HelloWorld.groovy`文件,选择`Run As -> Groovy Script`或`Run As -> Java Application`。控制台将会输出`Hello World`。 此外,还可以尝试更复杂的示例,例如: ```groovy ...
在压缩包文件`GroovyDemo`中,可能包含了各种Groovy脚本示例,如上述的Hello World程序或者使用闭包的示例。通过查看这些示例,读者可以更直观地理解Groovy的语法和特性,并动手实践,从而更好地掌握Groovy的使用。 ...
// 声明一个变量名称为hello且值为HelloWorld的字符串类型变量。 def hello = "HelloWorld" // 在控制台输出This is my first groovy program. println "This is my first groovy program." // 在控制台输出hello...
然后,可以在Groovy源文件夹下创建新的Groovy类,例如HelloWorld类。Groovy的主方法可以比Java更简洁,只需包含打印语句,如`println "Hello World"`。 Groovy的语法特性包括: 1. 变量声明:Groovy中的所有变量都...
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` 此外,Groovy支持内建的GroovyShell和GroovyScriptEngine,使得运行和测试Groovy脚本变得...
然后,可以新建Groovy类并编写代码,如经典的`HelloWorld`示例。 Groovy的语法特点包括: 1. 变量声明:Groovy中的变量默认是对象,无需显式声明类型,通常使用`def`关键字。例如,`def var = "hello world"`,...