日常编辑


在日常编辑中,我们经常要添加新的包到我们文件里,或者是新的类.那么,在 VJDE 里,应该怎样做比较好呢?
  1. 跳转到定义
  2. 导出包
  3. 自动添加包
  4. 删除没有使用的已经导入的类
  5. 包排序
  6. 将代码包括在 try-catch 块中
  7. 添加注释
  8. 生成 Getter , Setter 函数
  9. 生成 包含所有成员变量的构造函数
  10. 生成 当前类的 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会生成定义在当前位置.
继承/实现 主目录 日常编辑 (二)