在阅读了c#的隐藏特性之后,我想知道Java的隐藏特性有哪些?
当前回答
我投票给java.util.concurrent,因为它的并发集合和灵活的执行器允许线程池、计划任务和协调任务。DelayQueue是我个人最喜欢的,其中元素在指定的延迟后才可用。
timer和TimerTask可以安全地休息了。
而且,它不是完全隐藏的,而是在与日期和时间相关的其他类不同的包中。timeunit在纳秒、微秒、毫秒和秒之间转换时很有用。
它比通常的someValue * 1000或someValue / 1000读起来要好得多。
其他回答
"const"是一个关键字,但你不能使用它。
int const = 1; // "not a statement"
const int i = 1; // "illegal start of expression"
我猜编译器的作者认为将来可能会用到它,他们最好保留它。
他们花了足够长的时间来增加支持,
系统托盘
你可以在局部类的初始化块和方法中访问最终的局部变量和参数。考虑一下:
final String foo = "42";
new Thread() {
public void run() {
dowhatever(foo);
}
}.start();
有点像个了结,不是吗?
这并不是一个真正的隐藏功能,但当我看到这个编译好的时候,它确实给了我一个很大的惊喜:
public int aMethod(){
http://www.google.com
return 1;
}
它被编译的原因是编译器将http://www.google.com行“http:”部分视为标签,而该行的其余部分是注释。
所以,如果你想写一些奇怪的代码(或模糊的代码),只要在那里放很多http地址。: -)
如果你做了很多JavaBean开发,并且使用了属性更改支持,你通常会写很多这样的setter:
public void setFoo(Foo aFoo){
Foo old = this.foo;
this.foo = aFoo;
changeSupport.firePropertyChange("foo", old, aFoo);
}
我最近无意中发现了一篇博客,它提出了一个更简洁的实现,使代码更容易编写:
public void setFoo(Foo aFoo){
changeSupport.firePropertyChange("foo", this.foo, this.foo = aFoo);
}
它实际上简化了事情,以至于我能够在Eclipse中调整setter模板,从而自动创建方法。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap