日常编辑
在日常编辑中,我们经常要添加新的包到我们文件里,或者是新的类.那么,在 VJDE 里,应该怎样做比较好呢?
- 跳转到定义
- 导出包
- 自动添加包
- 删除没有使用的已经导入的类
- 包排序
- 将代码包括在 try-catch 块中
- 添加注释
- 生成 Getter , Setter 函数
- 生成 包含所有成员变量的构造函数
- 生成 当前类的 Singleton 模型
跳转到定义
在程序编辑过程中,我们经常需要跳转到别的函数或者变量定义的地方,在 VJDE 中,提供了一个粗糙的方法来完成这个功能.
通常,我在以下两变量中来定位,一是path中,请参考:h path,二是g:vjde_src_path,
将光标移动到你要查看的函数或者成员上,使用命令:Vjdegd,则自动跳转到当前符号的定义上去.
提示:目前,对于函数重载的跳转还不能精确.
提示:默认时,VJDE跳转前自动添加了一个标记J,即,当你希望回到你跳转前的位置,使用命令'J即可.
下面,我们就来讲如何处理这些细节.首先,我们可以使用代码补全来完成整个包的全路径书写,如:
导出包
package test;
public class Test extends Thread implements MouseListener {
public static void main(String[] args) {
System.out.println( "Hello World!");
java.util.Vector
}
}
在这种情况下,我们希望把这一行,变成Vector,而不把整个包全使用在这里.我们只需要把光标放到
Vector上,然后使用命令\je,即java extract import .
则代码变成如下样子:
package test;
import java.util.Vector;
public class Test extends Thread implements MouseListener {
public static void main(String[] args) {
System.out.println( "Hello World!");
Vector
}
}
自动添加包
在另外一些时候,我们知道我们要使用的类的名字,其实我们也知道他所在的位置,比如 java.io.File
通常情况下,我们需要在下面输入File在文件头加上import java.io.File
在 VJDE 里,你只需要很简单就可以完成上述的功能了.
输入 File, 然后,把光标移动到 File上,然后,使用命令\ai即 Add import.
package test;
import java.util.Vector;
import java.io.File;
public class Test extends Thread implements MouseListener {
public static void main(String[] args) {
System.out.println( "Hello World!");
Vector vs;
File
}
}
VJDE自动查找名为File 的类,添加到正确的位置,如果有多个类叫这个名字的时候,会提示选择.
删除没有使用的已经导入的类
当我们使用上述方法添加了需要的包的时候,由于代码的调整,我们可能有些类已经又不再使用了.
因此,我们希望我们可以将一些不再使用的类从import列表中删除.在 VJDE 中,我们可以这样做,如下代码:
package test;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.*;
import java.swing.JApplet;
public class Test {
private final static int HELLO = "Hello World!" ;
public static void main(String[] args) {
System.out.println(HELLO);
URL u;
}
}
在类的任何地方,我们使用命令\ri, 即 Remove Import.
则代码自动变成如下:
package test;
import java.net.URL;
import java.util.*;
public class Test {
private final static int HELLO = "Hello World!" ;
public static void main(String[] args) {
System.out.println(HELLO);
URL u;
}
}
目前,VJDE还不能删除以import ....*;类型的导入.
包排序
通过这样的编辑,我们的 import 语句就越来越多,当我们完成一个类的时候,这些语句已经很乱了.
于是. VJDE 提供了对 import 进行排序的方法.
首先,我们选择我们所有的 import 语句.
然后使用命令 \js Java sort import. 则我们刚才的代码变成如下:
package test;
import java.io.File;
import java.util.Vector;
public class Test extends Thread implements MouseListener {
public static void main(String[] args) {
System.out.println( "Hello World!");
Vector vs;
File
}
}
我们的 import 已经排序了.在通常情况下,我按如下方式进行排序:
import java.a..
import java.b...
import javax.a...
import javax.b...
import org.a...
import org.b..
import net.a
import net.b..
import com.a...
中间的空行也会自动生成.
提示:在选择一行或者多行的时候,不需要精确选择,只要那一行中有一个字符以上被选择即可.
将代码包括在 try-catch 块中
在 Java 中的异常处理,也是我们经常遇到的一个问题,因此,我们需要经常为一些函数调用加上try-catch 模块.
这是一个简单的操作,但是,由于经常要用,也是很烦人的. VJDE 也提供了一个简单的实现来解决这个问题.
当然,目前这个解决方案还很简单,但是,也勉强可以用了.假如我们有如下的代码:
package test;
import java.io.File;
import java.util.Vector;
public class Test extends Thread implements MouseListener {
public static void main(String[] args) {
System.out.println( "Hello World!");
Vector vs;
File f = new File("test.txt");
}
}
我们希望为 File 这一行加上 try-catch,因为有一个 FileNotFound的异常.
我们选择了这一行或者多行后,使用命令\jt, Java Try-catch
则代码就变成了:
package test;
import java.io.File;
import java.util.Vector;
public class Test extends Thread implements MouseListener {
public static void main(String[] args) {
System.out.println( "Hello World!");
Vector vs;
try {
File f = new File("test.txt");
}
catch(Exception ex) {
//TODO: Add Exception handler here
}
}
}
这个功能目前的缺陷是明显的,我没有区分出任何的异常,只是把它简单的做成了 Exception. 不要担心,后面有一种方法可以使VJDE精确的分出异常类别而正常使用.
提示:在选择一行或者多行的时候,不需要精确选择,只要那一行中有一个字符以上被选择即可.
添加注释
java 的文档格式要求是比较严格的,我们开发过程中也要求添加标准注释.目前,VJDE 已经可以为你生成这个文档模板了. 有如下的代码:
package test;
public class Test extends Thread implements MouseListener {
public static void main(String[] args) {
System.out.println( "Hello World!");
}
public int caculate(int b,int c) throws IOException {
return 0;
}
}
我们要为 caculate添加注释,我们只需要把光标移动到 caculate 函数上,然后使用命令\jc,Java Commenter.我们即看到 VJDE 生成了如下代码:
package test;
public class Test extends Thread implements MouseListener {
public static void main(String[] args) {
System.out.println( "Hello World!");
}
/**
*
* @param b
* @param c
* @return
* @throws IOException
*/
public int caculate(int b,int c) throws IOException {
return 0;
}
}
已经将变量,返回值,异常处理的标准格式为我们准备好了,等什么呢,只需要添加你要的注释就行了.
你可以将这个应用,使用到类,变量和函数上面.
生成 Getter , Setter 函数
在 Java 开发中,由于不推荐直接将变量暴露在外.因此,我们需要为变量写 Get, Set 函数,还要加注释,是不是很烦?
VJDE 为你简化了这些工作. 有如下代码:
package test;
public class Test extends Thread implements MouseListener {
String name;
public static void main(String[] args) {
System.out.println( "Hello World!");
}
}
我们将光标移动到 name 变量上,使用命令\jg Java Getter,即生成如下代码:
package test;
public class Test extends Thread implements MouseListener {
String name;
/**
* get the value of name
* @return the value of name
*/
public String getName(){
return this.name;
}
/**
* set a new value to name
* @param name the new value to be used
*/
public void setName(String name) {
this.name=name;
}
public static void main(String[] args) {
System.out.println( "Hello World!");
}
}
是不是已经自动生成了Get Set 函数还添加了简单的注释?
生成 包含所有成员变量的构造函数
当我们的一个类有很多成员变量的时候,特别是一些以定义数据为主的时候,我们需要为它生成一个全参数的构造函数,是一件比较麻烦的事情,一个一个参数的输入是不是很麻烦的一件事情?
在VJDE中,你可以这样做.在你的工程设置正常的情况下,编译你需要生成的类,然后,到类开头的地方,使用命令:call VjdeGenerateConstructor(),或者命令\jc则自动生成一个简单的构造函数了.
生成 当前类的 Singleton 模型
很多时候,我们需要把一个类做成 Singleton的单一实例模式.代码本来是很简单,可是,重复写也不是办法.于是 VJDE 就有了这个简单工具.这个工作是使用内置的代码模板来完成的.
有菜单的情况下,使用菜单,没有菜单的情况下,使用如下的命令:call VjdeAppendTemplate("Singleton")或者\as,Add Sigleton.以我们上面使用的 Test 为例,生成如下的代码:
package test;
public class Test extends Thread implements MouseListener {
private static Test instance = null;
private Test() {
}
public synchronized static Test getInstance() {
if ( instance == null) {
instance = new Test();
}
return instance;
}
public static void main(String[] args,File f) {
System.out.println( "Hello World!");
try {
f = new File("abc");
}
catch(Exception ex) {
//TODO: Add Exception handler here
}
}
}
提示, 为了生成正确的代码,请移动光标到类定义下一行开始,VJDE会生成定义在当前位置.