我需要编写一个方法,例如:
MyClassObject convert(Class MyClass , String value)
convert 方法的工作是将 String 转换为 MyClass 的对象,其中 MyClass 可以是任何东西(除了原语) - 整数、 boolean 值、字符、日期...这里的可能性是巨大的 - 这就是我的原因放弃了我愚蠢的 if-else block 来单独处理所有情况。
我可以看到与此相关的 C# 内容(不知道它是否有效),不知道我们是否有 this 的 Java 等效项或this
我知道并非所有内容都可以从字符串转换,我已准备好处理不可解析项目的异常。
我不知道这是否可能。如果没有,请帮助我为我的代码制定正确的设计模式。
谢谢!
最佳答案
您最好的选择可能是 ServiceLoader
机制。这允许您定义一对接口(interface),例如:
interface StringConverterProvider{
StringConverter<T> getConverterFor(Class<T> clazz);
}
interface StringConverter<T>{
T convert(String s);
}
...然后找到运行时可用的这些接口(interface)的所有实现,如下所示:
ServiceLoader<StringConverterProvider> converterProviderLoader
= ServiceLoader.load(StringConverterProvider.class);
T convert(String s, Class<T> t){
for(StringConverterProvider scProv : converterProviderLoader){
StringConverter<T> converter = scProv.getConverterFor(t);
if (converter != null)
return converter.convert(s);
}
return null;
}
您可以通过在 jar
的 META-INF
目录中的一个特殊文件中列出接口(interface)的实现来供 ServiceLoader
使用文件;有关详细信息,请参阅 javadoc。
关于java - 将 String 转换为任何所需类的通用代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9067040/