5 . 1 . 2 自定义工具库
来源:互联网 发布:mac 视频剪辑 水平调整 编辑:程序博客网 时间:2024/06/06 05:29
掌握前述的知识后,接下来就可以开始创建自己的工具库,以便减少或者完全消除重复的代码。例如,可为
System.out.println()创建一个别名,减少重复键入的代码量。它可以是名为tools 的一个包(package)的
一部分:
//: P.java
127
// The P.rint & P.rintln shorthand
package com.bruceeckel.tools;
public class P {
public static void rint(Object obj) {
System.out.print(obj);
}
public static void rint(String s) {
System.out.print(s);
}
public static void rint(char[] s) {
System.out.print(s);
}
public static void rint(char c) {
System.out.print(c);
}
public static void rint(int i) {
System.out.print(i);
}
public static void rint(long l) {
System.out.print(l);
}
public static void rint(float f) {
System.out.print(f);
}
public static void rint(double d) {
System.out.print(d);
}
public static void rint(boolean b) {
System.out.print(b);
}
public static void rintln() {
System.out.println();
}
public static void rintln(Object obj) {
System.out.println(obj);
}
public static void rintln(String s) {
System.out.println(s);
}
public static void rintln(char[] s) {
System.out.println(s);
}
public static void rintln(char c) {
System.out.println(c);
}
public static void rintln(int i) {
System.out.println(i);
}
public static void rintln(long l) {
System.out.println(l);
}
128
public static void rintln(float f) {
System.out.println(f);
}
public static void rintln(double d) {
System.out.println(d);
}
public static void rintln(boolean b) {
System.out.println(b);
}
} ///:~
所有不同的数据类型现在都可以在一个新行输出(P.rintln()),或者不在一个新行输出(P.rint() )。
大家可能会猜想这个文件所在的目录必须从某个CLASSPATH 位置开始,然后继续com/bruceeckel/tools。编
译完毕后,利用一个import 语句,即可在自己系统的任何地方使用P.class 文件。如下所示:
//: ToolTest.java
// Uses the tools library
import com.bruceeckel.tools.*;
public class ToolTest {
public static void main(String[] args) {
P.rintln("Available from now on!");
}
} ///:~
所以从现在开始,无论什么时候只要做出了一个有用的新工具,就可将其加入tools 目录(或者自己的个人
util 或tools 目录)。
1. CLASSPATH 的陷阱
P.java 文件存在一个非常有趣的陷阱。特别是对于早期的Java 实现方案来说,类路径的正确设定通常都是
很困难的一项工作。编写这本书的时候,我引入了P.java 文件,它最初看起来似乎工作很正常。但在某些情
况下,却开始出现中断。在很长的时间里,我都确信这是Java 或其他什么在实现时一个错误。但最后,我终
于发现在一个地方引入了一个程序(即第17 章要说明的CodePackager.java),它使用了一个不同的类P。
由于它作为一个工具使用,所以有时候会进入类路径里;另一些时候则不会这样。但只要它进入类路径,那
么假若执行的程序需要寻找com.bruceeckel.tools 中的类,Java 首先发现的就是CodePackager.java中的
P。此时,编译器会报告一个特定的方法没有找到。这当然是非常令人头疼的,因为我们在前面的类P 里明明
看到了这个方法,而且根本没有更多的诊断报告可为我们提供一条线索,让我们知道找到的是一个完全不同
的类(那甚至不是public 的)。
乍一看来,这似乎是编译器的一个错误,但假若考察import 语句,就会发现它只是说:“在这里可能发现了
P”。然而,我们假定的是编译器搜索自己类路径的任何地方,所以一旦它发现一个P,就会使用它;若在搜
索过程中发现了“错误的”一个,它就会停止搜索。这与我们在前面表述的稍微有些区别,因为存在一些讨
厌的类,它们都位于包内。而这里有一个不在包内的P,但仍可在常规的类路径搜索过程中找到。
如果您遇到象这样的情况,请务必保证对于类路径的每个地方,每个名字都仅存在一个类。
System.out.println()创建一个别名,减少重复键入的代码量。它可以是名为tools 的一个包(package)的
一部分:
//: P.java
127
// The P.rint & P.rintln shorthand
package com.bruceeckel.tools;
public class P {
public static void rint(Object obj) {
System.out.print(obj);
}
public static void rint(String s) {
System.out.print(s);
}
public static void rint(char[] s) {
System.out.print(s);
}
public static void rint(char c) {
System.out.print(c);
}
public static void rint(int i) {
System.out.print(i);
}
public static void rint(long l) {
System.out.print(l);
}
public static void rint(float f) {
System.out.print(f);
}
public static void rint(double d) {
System.out.print(d);
}
public static void rint(boolean b) {
System.out.print(b);
}
public static void rintln() {
System.out.println();
}
public static void rintln(Object obj) {
System.out.println(obj);
}
public static void rintln(String s) {
System.out.println(s);
}
public static void rintln(char[] s) {
System.out.println(s);
}
public static void rintln(char c) {
System.out.println(c);
}
public static void rintln(int i) {
System.out.println(i);
}
public static void rintln(long l) {
System.out.println(l);
}
128
public static void rintln(float f) {
System.out.println(f);
}
public static void rintln(double d) {
System.out.println(d);
}
public static void rintln(boolean b) {
System.out.println(b);
}
} ///:~
所有不同的数据类型现在都可以在一个新行输出(P.rintln()),或者不在一个新行输出(P.rint() )。
大家可能会猜想这个文件所在的目录必须从某个CLASSPATH 位置开始,然后继续com/bruceeckel/tools。编
译完毕后,利用一个import 语句,即可在自己系统的任何地方使用P.class 文件。如下所示:
//: ToolTest.java
// Uses the tools library
import com.bruceeckel.tools.*;
public class ToolTest {
public static void main(String[] args) {
P.rintln("Available from now on!");
}
} ///:~
所以从现在开始,无论什么时候只要做出了一个有用的新工具,就可将其加入tools 目录(或者自己的个人
util 或tools 目录)。
1. CLASSPATH 的陷阱
P.java 文件存在一个非常有趣的陷阱。特别是对于早期的Java 实现方案来说,类路径的正确设定通常都是
很困难的一项工作。编写这本书的时候,我引入了P.java 文件,它最初看起来似乎工作很正常。但在某些情
况下,却开始出现中断。在很长的时间里,我都确信这是Java 或其他什么在实现时一个错误。但最后,我终
于发现在一个地方引入了一个程序(即第17 章要说明的CodePackager.java),它使用了一个不同的类P。
由于它作为一个工具使用,所以有时候会进入类路径里;另一些时候则不会这样。但只要它进入类路径,那
么假若执行的程序需要寻找com.bruceeckel.tools 中的类,Java 首先发现的就是CodePackager.java中的
P。此时,编译器会报告一个特定的方法没有找到。这当然是非常令人头疼的,因为我们在前面的类P 里明明
看到了这个方法,而且根本没有更多的诊断报告可为我们提供一条线索,让我们知道找到的是一个完全不同
的类(那甚至不是public 的)。
乍一看来,这似乎是编译器的一个错误,但假若考察import 语句,就会发现它只是说:“在这里可能发现了
P”。然而,我们假定的是编译器搜索自己类路径的任何地方,所以一旦它发现一个P,就会使用它;若在搜
索过程中发现了“错误的”一个,它就会停止搜索。这与我们在前面表述的稍微有些区别,因为存在一些讨
厌的类,它们都位于包内。而这里有一个不在包内的P,但仍可在常规的类路径搜索过程中找到。
如果您遇到象这样的情况,请务必保证对于类路径的每个地方,每个名字都仅存在一个类。
0 0
- 5 . 1 . 2 自定义工具库
- 自定义工具库
- 自定义工具库
- 自定义控件工具类1
- eprint自定义打印工具
- (十) 创建自定义工具
- MAPINFO添加自定义工具
- MapX记录 - 自定义工具
- 自定义布局工具
- easyUI 自定义window工具
- java 自定义输出工具
- 自定义LogUtils工具类
- 自定义HttpClient工具类
- 自定义HttpURLConnection工具类
- 自定义日志工具类
- UtilTools 自定义工具类
- 自定义转换Json工具
- ios自定义工具类
- Poj 3928 Ping pong(树状数组)
- 菜鸟谈六西格玛
- 剪格子(蓝桥)
- android Noti
- Android 微信分享 bug 3月体验
- 5 . 1 . 2 自定义工具库
- 如何选择日志审计系统
- 5 . 1 . 3 利用导入改变行为
- 开源项目如何利用社交媒体
- 对于PowerDesigner中设计表自动生成Sql的分析
- php文件的操作
- mysql 插入无法提交
- mfc视图切换大全
- 串口接收后发送指定的数字