最近遇到一个案例,我想要预先但可配置的类型(长篇大论)。通常我会这样做
Type t = new TypeToken<ArrayList<Integer>>() {}.getType();
我想把右手边放到我的 spring 属性文件中,然后发出类似这样的调用:
Type t = env.getProperty("type-property");
或者使用@ConfigurationProperties。
我通常使用@ConfigurationProperties,但我所在的存储库没有它可用。如果第一种方法根本不可能,我可以提出引入依赖关系的案例,但阻力最小的路径是可取的。
我用尖括号、括号和方括号尝试了以下属性定义的一些变体——没有一个成功。
type-property=java.util.ArrayList<java.lang.Integer>
对于您在此问题上被迫使用的各种搜索字词,我很难获得任何有用的信息。我找到了这个相关的问题,但没有运气将它翻译成非 xml 配置(我也不能在这个项目中做 xml 样式)。链接:在 Spring xml 配置中创建 Guava TypeToken?
编辑:使用@LppEdd 提供的答案,我使用以下调用进行反序列化:
Type sampleType = new TypeToken<HashSet<ArrayList<Integer>>>() {}.getType();
// serialize via java.lang.reflect.Type.getTypeName()
String serializedType = sampleType.getTypeName();
// above string value is "java.util.HashSet<java.util.ArrayList<java.lang.Integer>>"
// deserialize via org.eclipse.jetty.util.TypeUtil.fromName(String name)
Type sampleTypeAgain = TypeUtil.fromName(serializedType);