Java 的语法比 C/C++ 友好很多, 因为它设计之初,就是为了考虑到程序员的使用是否舒适。 当然很多事情愿望是美好的,现实是残酷的。Java 语言本身的语法仍然不可避免的带有着 10年前那种 的僵硬和严谨。这里是一些小小的尝试,你会发现,大多数情况,通过一些静态函数,一行代码完全 可以做很多事情, 而且比“甜甜”的 Ruby 也差不了太多。
你可以查看 org.nutz.lang Git@OSC镜像 下 的源代码。为了便于你学习,我将里面部分最常用的用法列在文档里,便于快速学习查看。
我希望在 80% 以上的情况下,这些函数能让你有效的缩短你代码的体积,并且增加代码的可读性。
throw Lang.makeThrow("Error for %d [%s]", obj.getId(), obj.getName());
throw Lang.makeThrow(SQLException.class, "Error for %d [%s]", obj.getId(), obj.getName());
throw Lang.noImplement();
throw Lang.wrapThrow(e);
throw Lang.wrapThrow(e, SQLException.class);
throw Lang.comboThrow(e1,e2,e3);
throw Lang.wrapThrow(e, "Error for %d [%s]", obj.getId(), obj.getName());
return Lang.equals(map1, map2);
return Dumps.obj(pojo);
return Lang.contains(myArray, ele);
Lang.each(obj, new Each<Object>(){
public void invoke(int i, T ele, int length){
obj 可以是集合,数组,Map,普通对象.
普通对象的话,则会传给本匿名类的 ele
}
});
Pet[] pets = new Pet[3];
... // 为数组赋值
// 将把 Pet 对象的 name 字段的值作为 Key, 创建一个 Map
Map<String,Pet> petMap = Lang.array2map(HashMap.class, pets, "name");
Pet[] pets = new Pet[3];
String[] ss = Lang.array2array(pets, String.class);
List<Pet> pets = new ArrayList<Pet>();
... // 为列表赋值
Pet[] petArray = Lang.collection2array(pets);
Queue<Pet> pets = new ArrayDeque<Pet>();
... // 为队列赋值
List<Pet> list = Lang.collection2list(pets);
Queue<Pet> pets = new ArrayDeque<Pet>();
... // 为队列赋值
// 将把 Pet 对象的 name 字段的值作为 Key, 创建一个 Map
Map<String,Pet> petMap = Lang.collection2map(HashMap.class, pets, "name");
return Lang.map2Object(map,Pet.class);
String[] ss = Lang.array("A","B","C");
Reader reader = Lang.inr("ABCDEF");
InputStream ins = Lang.ins("ABCDEF");
Map<String,Object> map = Lang.map("{a:10, b:'ABC', c:true}");
List<Object> list = Lang.list("[true, 23, 'ABC']");
return Xmls.xmls();
Document xmlDoc = Xmls.xml(Files.findFile("~/my.xml"));
Element ele = ... // 假设你取到了一个 Element
String txt = Xml.get(ele, "abc"); // 获取 ele 下的 <abc> 的文本内容并去掉前后空白
assertTrue(Strings.isEmpty(""));
assertTrue(Strings.isBlank("\t \r\n"));
assertTrue(Strings.isQuoteBy("[ABC]", '[', ']'));
// 忽略空白
assertTrue(Strings.isQuoteByIgnoreBlank(" \t [ABC]\r\n ", '[', ']'));
assertEquals(3, Strings.maxLength((String[]){"A","ABC","BC"}));
// 集合
assertEquals(3, Strings.maxLength(Lang.list("['A','ABC','BC']")));
assertEquals("abc", Strings.sNull(null, "abc"));
assertEquals("abc", Strings.sBlank(" \n\t", "abc"));
assertEquals("Abc", Strings.capitalize("abc"));
assertEquals("aBC", Strings.lowerFirst("ABC"));
assertEquals("ABC", Strings.trim("\t ABC \r\n "));
assertEquals("00FE", Strings.alignRight("FE", 4, '0'));
assertEquals("FFFF", Strings.alignRight("FFFF", 2, '0'));
assertEquals("FE00", Strings.alignLeft("FE", 4, '0'));
assertEquals("FFFF", Strings.alignLeft("FFFF", 2, '0'));
assertEquals("00FE", Strings.cutRight("FE", 4, '0'));
assertEquals("CD", Strings.cutRight("ABCD", 2, '0'));
assertEquals("FE00", Strings.cutLeft("FE", 4, '0'));
assertEquals("AB", Strings.cutLeft("ABCD", 2, '0'));
assertEquals("0110", Strings.fillBinary(6, 4));
assertEquals("00FF", Strings.fillHex(255, 4));
assertEquals(3, Strings.splitIgnoreBlank("A,B,C"));
assertEquals(3, Strings.splitIgnoreBlank(",A,B,,C,"));
// 重复字符
assertEquals("---", Strings.dup('-', 3));
// 重复字串
assertEquals("ABCABCABC", Strings.dup("ABC", 3));
return Files.findFile("org/nutz/lang/Lang.class");
return Files.findEntryInZip(new ZipFile("D:/nutz.jar"), "org/nutz/lang/Lang.class");
return Resources.scanClass(Lang.class);
Files.createNewFile(new File("D:/demo/abc.txt"));
Files.makeDir(new File("D:/demo/abc"));
Files.deleteDir(new File("D:/demo/abc"));
Files.clearDir(new File("D:/demo/abc"));
Files.cleanAllFolderInSubFolderes(new File("D:/demo"), ".svn");
Files.copyFile(new File("D:/a/b/c.txt"), new File("E:/a/b/e.txt"));
Files.copyDir(new File("D:/a/b/c"), new File("E:/a/b/e"));
String txt = Files.read("D:/abc.txt");
或者
String txt = Lang.readAll(Streams.fileInr("D:/abc.txt"));
// 如果 D:/abc.txt 不存在,则创建它
String txt = Files.write("D:/abc.txt", "some text");
或者
// 如果 D:/abc.txt 不存在,则什么都不做
String txt = Lang.writeAll(Streams.fileOutw("D:/abc.txt"), content.toString());
Reander reader = Streams.fileInr("D:/abc.txt");
或者
Reander reader = Streams.fileInr(new File("D:/abc.txt"));
Writer writer = Streams.fileOutw("D:/abc.txt");
或者
Writer writer = Streams.fileOutw(new File("D:/abc.txt"));
InputStream ins = Streams.fileIn("D:/abc.txt");
或者
InputStream ins = Streams.fileIn(new File("D:/abc.txt"));
OutputStream ops = Streams.fileOut("D:/abc.txt");
或者
OutputStream ops = Streams.fileOut(new File("D:/abc.txt"));
Files.move(new File("D:/demo/abc.txt"), new File("D:/demo/def.txt"));
Files.rename(new File("D:/demo/abc.txt"), "def.txt");
return Files.renameSuffix(new File("D:/demo/abc.txt"), ".java");
assertEquals("abc", Files.getMajorName(new File("D:/demo/abc.txt")));
assertEquals("txt", Files.getSuffixName(new File("D:/demo/abc.txt")));
Stopwatch sw = Stopwatch.begin();
...
这里是你的运行代码
...
sw.stop();
System.out.println(sw.getDuration());
// 生成 100 个长度不超过20的字符串
StringGenerator sg = new StringGenerator(20);
for(int i=0;i<100;i++)
System.out.println(sg.next());
return R.random(3,5)
return (new EnumRandom<MyEnums>(){}).next();
Random<String> r = new ArrayRandom<String>(Lang.array("A", "B", "C"));
int i = 0;
while (null != r.next()) {
i++;
}
assertEquals(3, i);
Random<String> r = new RecurArrayRandom<String>(Lang.array("A", "B", "C"));
for(int i=0; i<100; i++)
System.out.println(r.next());
System.out.println(Dumps.matcher(matcher));
assertTrue(Lang.parseBoolean("on"));
assertTrue(Lang.parseBoolean("1"));
assertTrue(Lang.parseBoolean("yes"));
本页面的文字允许在知识共享 署名-相同方式共享 3.0协议和GNU自由文档许可证下修改和再使用。