【发布时间】:2014-01-26 15:18:31
【问题描述】:
我有一个方便的函数,它接受各种类型的对象并以可序列化的方式将它们转换。例如,将类 JSON 对象转换为 JSON:
public static <T> String process( List<T> list ) {
if( list instanceof JSONArray ) {
return ((JSONArray) list).toJSONString( );
}
// stringify the list
}
public static String process( JSONAware object ) { // array, map, value, ...
return object.toJSONString( );
}
我正在使用org.json.simple 库,所以JSONArray extends ArrayList implements JSONAware。但这意味着当我发送 JSONArray 时,我得到:
对进程的引用不明确
我知道它同样适用于任何一种方法,这就是为什么我在这两种方法中都有相同的实现。
很明显,我可以将这两个函数替换为一个采用任意 Object 类型的函数,但这会消除很多我不满意的编译时检查。我还可以重命名其中一个函数以强制进行特定选择,但这会使 API 复杂化。
有没有什么方法可以强制一个特定的选择,或者让编译器明白在这些情况下调用哪个方法并不重要?
【问题讨论】:
-
你有第二个吗 - 你可以在对象上调用 toJSONString
-
这是代码的简化示例。把它想象成serialize-over-http;它还存储有关已发送对象类型的信息。我正在使用它,以便基于 Web 的界面可以显示有关任意对象的信息(并且对象的类型包含在发送的数据中)
标签: java generics operator-overloading