【发布时间】:2011-11-03 00:49:05
【问题描述】:
默认情况下,如果存在适当的构造函数(并且未声明 explicit),C++ 将在赋值中执行“自动提升”。
在 Java 中,默认情况下不会发生这种行为。如果我想要自动提升,有没有办法将我的构造函数声明为隐式?
例如,下面是一些具有我想要的效果的 C++ 代码:
class Foo {
public:
Foo(string) { /* ... */ }
/* Foo's methods and stuff */
};
void DoSomethingWithAFoo(Foo foo)
{
/* ... */
}
int main()
{
string s = "I am a happy string, I swear!";
DoSomethingWithAFoo(s);
return 0;
}
通常,在 C++ 中这是允许的,并且string s 将被自动提升(通过从s 构造一个临时的Foo)。
由于Foo(string) 构造函数没有被标记为显式,我什至不需要类型转换。
有没有办法在 Java 中做到这一点?
我之所以这么问,是因为我正在尝试创建一种特定类型,它代表特定种类的其他类型中的任何一种。例如,想象一个class Primitive 表示单个布尔值、整数、字符或双精度(这不是我的具体示例,但它是相关的)。
我的系统中期望 Primitive 的方法也应该接受 Primitive 可能表示的任何“真实类型”(通过构造函数调用自动提升到 Primitive 类型的匿名对象)。
在我的实际工作中(与本示例相反),我的等效于 Primitive 类的构造函数既来自几个原始类型,也来自几个对象类型(每个构造函数只接受一个参数)。理想情况下,我希望为所有这些人提供自动促销。
【问题讨论】:
标签: java