Sim*_*son 10 java graceful-degradation
我想使用Java 1.6中的java.text.Normalizer类来进行Unicode规范化,但我的代码必须能够在Java 1.5上运行.
我不介意在1.5上运行的代码是否不进行规范化,但我不希望它在运行时给出NoClassDefFoundErrors或ClassNotFoundExceptions.
实现这一目标的最佳方法是什么?
ska*_*man 13
通常的做法是通过反射,即不直接引用相关类,而是以编程方式调用它.如果相关代码不存在,您可以优雅地捕获异常,并忽略它或尝试其他方法.反射抛出ClassNotFoundException,这是一个很好的正常例外,而不是NoClassDefFoundError,这有点可怕.
在这种情况下java.text.Normalizer,这应该很简单,因为它只是几个静态方法,并且很容易通过反射调用.
public interface NfcNormalizer
{
public String normalize(String str);
}
public class IdentityNfcNormalizer implements NfcNormalizer
{
public String normalize(String str)
{
return str;
}
}
public class JDK16NfcNormalizer implements NfcNormalizer
{
public String normalize(String str)
{
return Normalizer.normalize(str, Normalizer.Form.NFC);
}
}
Run Code Online (Sandbox Code Playgroud)
在您的客户端代码中:
NfcNormalizer normalizer;
try
{
normalizer = Class.forName("JDK16NfcNormalizer").newInstance();
}
catch(Exception e)
{
normalizer = new IdentityNfcNormalizer();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2645 次 |
| 最近记录: |