在阅读完C#的隐藏特性后,我想知道Java有哪些隐藏特性?
你可以在方法中声明一个类:
public Foo foo(String in) {
class FooFormat extends Format {
public Object parse(String s, ParsePosition pp) { // parse stuff }
}
return (Foo) new FooFormat().parse(in);
}
自限定泛型:
class SelfBounded<T extends SelfBounded<T>> {
}
我非常喜欢Java 1.6重写的线程API,特别是Callables。它们基本上就像带返回值的线程。
我喜欢使用静态方法导入。
例如创建以下实用类:
package package.name;
public class util {
private static void doStuff1(){
//the end
}
private static String doStuff2(){
return "the end";
}
}
然后像这样使用它。
import static package.name.util.*;
public class main{
public static void main(String[] args){
doStuff1(); // wee no more typing util.doStuff1()
System.out.print(doStuff2()); // or util.doStuff2()
}
}
静态导入适用于任何类,甚至适用于Math...
import static java.lang.Math.*;
import static java.lang.System.out;
public class HelloWorld {
public static void main(String[] args) {
out.println("Hello World!");
out.println("Considering a circle with a diameter of 5 cm, it has:");
out.println("A circumference of " + (PI * 5) + "cm");
out.println("And an area of " + (PI * pow(5,2)) + "sq. cm");
}
}
List.subList返回原始列表的视图
列表的一个已记录但鲜为人知的特性。这使您可以使用列表的部分,并且在原始列表中反映更改。
List subList(int fromIndex, int toIndex)
"此方法消除了对显式范围操作(例如数组通常存在的操作)的需求。通过传递子列表视图而不是整个列表,可以将预期列表的任何操作用作范围操作。例如,以下惯用语从列表中移除一系列元素:
list.subList(from, to).clear();
可以使用类似的习语来构建indexOf和lastIndexOf,而Collections类中的所有算法都可以应用于子列表。
list.subList(from, to).clear()
时,他们会惊叹这太酷了!但在其他库中,它只是list.RemoveRange(from, to)
,更加整洁、直接和可用。 - Pacerier哦,我差点忘记了这个小宝石。在任何正在运行的Java进程上尝试此操作:
jmap -histo:live PID
您将获得给定虚拟机中活动堆对象的直方图。作为快速解决某些类型内存泄漏的无价之宝。我使用的另一种技术是创建并使用大小有限的所有集合类子类。这会导致失控集合的快速失败,易于识别。
你可以使用一项功能来显示 Java 基于控制台的应用程序的闪屏。
使用带有选项 -splash
的命令行工具 java
或 javaw
例如:
java -splash:C:\myfolder\myimage.png -classpath myjarfile.jar com.my.package.MyClass
当你执行类"com.my.package.MyClass"时,C:\myfolder\myimage.png
的内容将显示在屏幕中央。
使用静态导入,您可以做很酷的事情,例如:
List<String> myList = list("foo", "bar");
Set<String> mySet = set("foo", "bar");
Map<String, String> myMap = map(v("foo", "2"), v("bar", "3"));
Javadoc(Java文档)- 如果正确编写(不幸的是有些开发者没有这么做),它会为您提供清晰、连贯的代码描述,告诉您代码应该执行什么而不是实际上执行了什么。然后可以将其转换为漂亮的可浏览HTML文档集。如果使用持续集成等工具,它可以定期生成,以便所有开发人员都能看到最新的更新。