10
|
Simon Nickerson · 技术社区 · 15 年前 |
1
13
通常的方法是通过反射,即不要直接引用相关的类,而是通过编程方式调用它。这允许您在所讨论的代码不存在时优雅地捕获异常,并忽略它,或者尝试其他方法。反射投掷
在情况下
|
2
9
在客户代码中:
|
3
3
如果您想避免反射,实际上可以捕获这些错误。 通过这种方式,您可以使用Java6编译器针对闪亮的新类进行编译,它仍然可以在Java5上工作(如“不做任何事情,但也不会崩溃”)。 您还可以组合这两种方法,并使用反射检查类是否存在,以及它是否继续以非反射方式调用它。这就是安德鲁的解决方案。 如果你还需要 编译 在Java5上,那么你需要一路反思。 |
4
1
我有同样的需求,因为我们有代码需要运行在Java 1.2的所有版本的Java上,但是如果代码可用,一些代码需要利用更新的API。 在使用反射来获取方法对象并动态调用它们的各种排列之后,一般来说,我已经将包装风格的方法定为最佳方法(尽管在某些情况下,仅仅将反射方法存储为静态方法并调用它更好,这取决于具体情况)。 下面是一个示例“系统实用工具”类,它在运行早期版本时为Java 5公开某些更新的API,在早期JVM中,Java 6使用相同的原则。这个例子使用了一个单例,但是如果底层API需要的话,可以很容易地实例化多个对象。 有两类:
后者是运行时JVM是Java 5或更高版本时使用的。否则,在契约中兼容的回退方法将从SysUtil的默认实现中使用,该实现仅使用Java 4或更早的API。每个类都是用特定版本的编译器编译的,因此Java 4类中没有意外使用Java 5 + API: SyStul(用Java 4编译器编译)
SysTurijJ5(用Java 5编译器编译)
|
5
1
检查/使用/修改类 info.olteanu.utils.TextNormalizer 在Phramer项目中( http://sourceforge.net/projects/phramer/ ,www.phramer.org)-代码是BSD许可的。 该代码可以在Java 5中编译并运行在Java 5或Java 6(或将来的Java版本)中。此外,它可以在Java 6中编译并在Java 5中运行(如果它是用适当的“目标”、字节码兼容)或Java 6或任何其他未来版本编译的。 这完全解决了你的问题——你可以在任何Java 5 +平台上编译,你可以在任何Java 5 +平台上获得所需的功能(标准化)(*) (*)规范化的Sun Java 5解决方案很可能不存在于所有Java 5实现中,所以在最坏的情况下,当调用GealQualEnsithStrufFielter()方法时,最终会得到类NojFuffDestExpTebug。 |
6
0
|
7
0
这是一个古老的问题,但仍然是事实。我发现了一些答案中没有提到的可能性。
通常建议使用反射,如这里其他一些答案所示。但是如果你不想把代码搞得一团糟,你可以使用
icu4j library
. 它包含
如果使用Normalizer类只是为了从字符串中删除重音符号/音调符号,那么还有另一种方法。你可以用
Apache commons lang library (ver. 3)
包含
根据Java版本,Lang3库可能使用反射调用适当的Normalizer。所以优点是您的代码中没有反射混乱。 |