【发布时间】:2011-01-25 06:09:58
【问题描述】:
有没有办法在 Java 中进行自动隐式类型转换?例如,假设我有两种类型,“FooSet”和“BarSet”,它们都是 Set 的表示形式。类型之间的转换很容易,所以我写了两个实用方法:
/** Given a BarSet, returns a FooSet */
public FooSet barTOfoo(BarSet input) { /* ... */ }
/** Given a FooSet, returns a BarSet */
public BarSet fooTObar(FooSet input) { /* ... */ }
现在说我想调用这样的方法:
public void doSomething(FooSet data) {
/* .. */
}
但我只有BarSet myBarSet...这意味着额外的输入,例如:
doSomething(barTOfoo(myBarSet));
有没有办法告诉编译器某些类型可以自动转换为其他类型?我知道这在重载的 C++ 中是可能的,但我在 Java 中找不到方法。我只想能够输入:
doSomething(myBarSet);
并且编译器知道自动调用barTOfoo()
【问题讨论】:
-
更多详细信息...我有两个无法更改的独立库,它们都使用相似但不兼容的数据结构。我经常需要从一个库中获取数据,对其进行操作,然后将其传递给另一个库。我的代码最终到处都是 fooTObar 和 barTOfoo 调用。
-
这种类似但不完全直接兼容的 API 之间的粘合绝对不是 Java 的优势之一。有很多样板可以完成。
-
如果有人好奇的话,这两个库是基于 JSON 的对象(用于与 Web 服务通信)和基于 AMF 的对象(用于通过持久 RMTP 连接与 Flash 客户端通信)。 AMF 和 JSON 都有数组、列表、关联数组、对象等的概念。所以在 Java 中,我不断在 AMFDataArray 和 JSONArray、AMFDataObj 和 JSONObject 等之间进行转换。
标签: java type-conversion overloading