2024-04-20 09:00:01

Java的隐藏特性

在阅读了c#的隐藏特性之后,我想知道Java的隐藏特性有哪些?


当前回答

当我第一次注意到三元运算符等于一个简单的if-then-else语句时,我很惊讶:

minVal = (a < b) ? a : b;

其他回答

字符串参数化类工厂。

Class.forName( className ).newInstance();

从部署jar文件中加载资源(属性文件,xml, xslt,图像等)。

this.getClass().getClassLoader().getResourceAsStream( ... ) ;

它并不是完全隐藏的,但反射是非常有用和强大的。使用简单的class . forname("…"). newinstance()是很好的,其中类类型是可配置的。编写这种工厂实现很容易。

动态代理(在1.3中添加)允许您在运行时定义符合接口的新类型。它派上用场的次数多得惊人。

作为初学者,我非常欣赏Java 6中的JConsole监控软件,它已经为我解决了一些问题,而且我还在不断地寻找它的新用途。

显然JConsole在Java 5中已经有了,但我认为现在它已经改进了,至少现在工作得更稳定了。

Java 5中的JConsole: Java 5中的JConsole

Java 6中的JConsole: Java 6中的JConsole

当你在做它的时候,好好看看本系列中的其他工具: java6故障排除工具

那么自JDK 1.5以来就存在的协变返回类型呢?它的宣传很差,因为它是一个不吸引人的附加,但据我所知,它对泛型工作是绝对必要的。

本质上,编译器现在允许子类将被覆盖方法的返回类型缩小为原始方法返回类型的子类。所以这是允许的:

class Souper {
    Collection<String> values() {
        ...
    }
}

class ThreadSafeSortedSub extends Souper {
    @Override
    ConcurrentSkipListSet<String> values() {
        ...
    }
}

您可以调用子类的values方法并获得一个排序的线程安全的字符串集,而不必向下强制转换为ConcurrentSkipListSet。