很久没有苦学groovy了.今天再翻看了一下groovy in action,as keyword,它支持类型的别名:
在java里面,对一些已经写好了,标记为final的,或者不被推荐继承的类和接口,我们可以说是毫无办法可言,可是在groovy的帮助下就不一样了,groovy绝对不是Java的语法糖(groovy in action的作者老是强调这一观点,不过说得很实在,groovy的出现的确减少了程序员的开发工作量)。这时候,groovy的as关键字就大派用场了.
as.groovy 代码
- import java.net.URLEncoder as U1
- import java.net.URLEncoder as U2
- println U1.encode("中","gbk");
- println U2.encode("国","gb2312");
- println U1.encode("人","gb18030");
输出结果
- F:\>groovy as.groovy
- %D6%D0
- %B9%FA
- %C8%CB
这里,我选用了做web开发比较常用的URLEncoder,我们可以动态地给URLEncoder加上自己的方法.
as2.groovy 代码
- import java.net.URLEncoder as U1
- import java.net.URLEncoder as U2
- class U3 extends U2{
- GString encode(GString str){
- encode(str,"UTF8");
- }
- }
- println U1.encode("中","gbk");
- println U2.encode("国","gb2312");
- println U1.encode("人","gb18030");
- println U3.encode("中国人");
输出结果
- F:\>groovy as2.groovy
- %D6%D0
- %B9%FA
- %C8%CB
- %D6%D0%B9%FA%C8%CB
看到了嘛?使用了as,我们保持了之前的类库,比如说是第三方的类库时,又可以动态地添加自己的方法。读起来也相当容易。动态语言就是不一样。其实java5.0也有类似的static import 的特性,只不过它的目的是针对可重用性,但是如果遇到了名字冲突的情况,比如说static import了两个类,他们含有相同名字的方法,那时就比较麻烦了,而且可读性不好。groovy的as算是对java的一种补充吧.
分享到:
相关推荐
- **编译和运行**:完成Groovy代码后,右键点击源文件,选择`Compile Groovy File`进行编译,然后选择`Run As` -> `Groovy`来运行程序。Groovy允许你只写一行代码(如`println "Hello World"`)即可构成一个完整的...
比如,Groovy允许开发者省略语句末尾的分号(逗号),在某些情况下甚至可以省略`return`关键字。此外,Groovy的脚本特性使得它可以直接执行,无需像Java那样定义`main`方法或强制使用类结构。这意味着Groovy的代码...
- 使用 `as` 关键字可以转换变量类型,如 `"1" as Integer` 将字符串 "1" 转换为整型。 #### 三、数据类型与结构 - **基础类型**:与 Java 类似,支持整型、浮点型、布尔型等。 - **GString**:Groovy 特有的字符...
- **`as`**:用于类型转换,使变量或表达式能够被当作另一种类型来处理。 - **`assert`**:断言语句,用于测试条件是否为真,常用于开发过程中的调试。 - **`import`**:引入类或包,使得无需完全限定名即可使用特定...
3. **运行Groovy脚本**:右键点击`HelloWorld.groovy`文件,选择`Run As -> Groovy Script`或`Run As -> Java Application`。控制台将会输出`Hello World`。 此外,还可以尝试更复杂的示例,例如: ```groovy ...
```groovy dependencies { implementation 'com.baidu.mapapi:baidumap-sdk:5.6.0' } ``` 之后,确保你的AndroidManifest.xml文件中已经添加了必要的权限,包括访问网络、读写外部存储以及使用GPS定位等: ```xml...
2. **定义JNI函数**:在Java源码中,我们使用`native`关键字声明一个方法,然后使用`System.loadLibrary("your_library_name")`加载对应的本地库。例如: ```java public class MainActivity extends ...
其中一些常用的关键字包括 `as`、`assert`、`break`、`case`、`catch`、`class`、`const`、`continue`、`def`、`default`、`do`、`else`、`enum`、`extends`、`false`、`finally`、`for`、`goto`、`if`、`implements...
其基本格式是一个`pipeline`块,包含`agent`(执行器)、`stages`(阶段)、`steps`(步骤)等关键字。例如: ```groovy pipeline { agent any stages { stage('Build') { steps { sh 'mvn clean install' } ...
在Pipeline中,我们通过`params`关键字来访问这些参数。 2. **定义参数** 在Jenkinsfile中,我们可以使用`parameters`块来定义参数化变量。例如,创建两个文本参数`envName`和`branchName`: ```groovy pipeline...
Jenkins 2.0在原有基础上引入了Pipeline as Code的理念,允许用户用Groovy脚本定义整个CI/CD流程,并将其保存在版本控制系统中。这种方式增强了流程的可重复性和可维护性。例如,你可以创建一个pipeline,从源代码...
在Java类中声明本地方法,使用`native`关键字修饰。例如: ```java public class JniDemo { static { System.loadLibrary("jnidemo"); // 加载名为jnindemo的本地库 } public native String stringFromJNI(); ...
3. **编写Java代码**:在对应的Java类中,使用`native`关键字声明对应C函数,并在`System.loadLibrary("mylibrary")`中指定.so库的名字。 ```java public class MyActivity extends AppCompatActivity { static { ...
在Java类中,使用`native`关键字声明本地方法,例如: ```java public class MyActivity extends AppCompatActivity { static { System.loadLibrary("mylibrary"); } native void doSomething(); } ``` ...
`JNIEXPORT`和`JNIEXPORT`是导出函数的关键字,`JNIEnv*`和`jobject`是JNI函数的通用参数。 然后,我们需要创建一个CMakeLists.txt文件,告诉CMake如何构建我们的原生库。在这个文件中,我们将源文件添加到目标中,...
使用 `JNIEXPORT` 和 ` JNICALL` 关键字定义方法,同时用 `JNIEXPORT` 定义返回类型,` JNICALL` 定义调用约定。然后使用 `javah` 或者 Android Studio 自动生成的 `JNIHeader` 功能来生成对应的头文件。 4. **实现...
它通过`pipeline`、`stage`、`step`等关键字来定义流程。 - **Scripted Pipeline**:另一种模式,更灵活但更复杂,直接在Groovy脚本中编写所有逻辑,适用于更复杂的自动化需求。 2. **Jenkinsfile** 每个Pipeline...
这个类通常会包含`native`关键字修饰的方法,表示这些方法将在C/C++代码中实现。例如: ```java public class NativeHelper { static { System.loadLibrary("SoTest"); // 加载名为SoTest的.so库 } public ...