在阅读了c#的隐藏特性之后,我想知道Java的隐藏特性有哪些?
当前回答
可以使用枚举来实现接口。
public interface Room {
public Room north();
public Room south();
public Room east();
public Room west();
}
public enum Rooms implements Room {
FIRST {
public Room north() {
return SECOND;
}
},
SECOND {
public Room south() {
return FIRST;
}
}
public Room north() { return null; }
public Room south() { return null; }
public Room east() { return null; }
public Room west() { return null; }
}
编辑:多年后....
我在这里使用了这个特性
public enum AffinityStrategies implements AffinityStrategy {
https://github.com/peter-lawrey/Java-Thread-Affinity/blob/master/src/main/java/vanilla/java/affinity/AffinityStrategies.java
通过使用接口,开发人员可以定义自己的策略。使用枚举意味着我可以定义一个内置在一个中的集合(五个)。
其他回答
一些控制流的技巧,最后围绕一个return语句:
int getCount() {
try { return 1; }
finally { System.out.println("Bye!"); }
}
确定赋值规则将检查最终变量总是通过简单的控制流分析进行赋值:
final int foo;
if(...)
foo = 1;
else
throw new Exception();
foo+1;
我投票给java.util.concurrent,因为它的并发集合和灵活的执行器允许线程池、计划任务和协调任务。DelayQueue是我个人最喜欢的,其中元素在指定的延迟后才可用。
timer和TimerTask可以安全地休息了。
而且,它不是完全隐藏的,而是在与日期和时间相关的其他类不同的包中。timeunit在纳秒、微秒、毫秒和秒之间转换时很有用。
它比通常的someValue * 1000或someValue / 1000读起来要好得多。
列表。subblist返回原始列表的视图
一个有文献记载但鲜为人知的列表特征。这允许您使用反映在原始列表中的更改来处理列表的部分。
列出子列表(int fromIndex, int toIndex)
这种方法消除了显式范围操作的需要(通常存在于数组的那种操作)。任何需要一个列表的操作都可以通过传递一个subblist视图而不是整个列表来用作范围操作。例如,下面的习惯用法从列表中移除一系列元素: 列表。分表(,).clear (); 类似的习惯用法可以用于indexOf和lastIndexOf, Collections类中的所有算法都可以应用于子列表。”
我知道这是在1.5版中添加的,但是新的enum类型是一个很棒的特性。不必使用旧的“int enum模式”极大地帮助了我的一堆代码。看看JLS 8.9的甜肉汁你的土豆!
如果不使用默认初始化式,Java处理在变量定义上做了一个巧妙的技巧。
{ int x; if(whatever) x=1; if(x == 1) ... }
这将在编译时给您一个错误,即您有一个X未正确定义的路径。这帮助了我几次,我已经开始考虑默认的初始化,像这样:
int x=0; String s=null;
这是一个不好的模式,因为它阻碍了这种有用的检查。
也就是说,有时很难解决这个问题——当它作为默认值有意义时,我不得不回去编辑=null,但我再也没有在第一次传递时把它放在里面了。
推荐文章
- 在流中使用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