默认情况下,如果存在适当的构造函数(并且未声明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
将自动提升(通过从Foo
构建临时s
)。
由于Foo(string)
构造函数未标记为显式,因此我甚至不需要进行类型转换。
有没有办法在Java中执行此操作?
我问,因为我正在尝试创建一个特定类型,代表特定种类的其他类型中的任何一种。例如,假设class Primitive
表示单个布尔值,整数,字符或双精度(这不是我的具体示例,但它是相关的)。
我的系统中期望Primitive的方法也应该接受Primitive可能表示的任何“真实类型”(通过构造函数调用自动升级到Primitive类型的匿名对象)。
在我的实际工作中(与此示例相反),我对Primitive
类的等价物具有来自几个基本类型以及几个对象类型(每个构造函数只接受一个参数)的构造函数。理想情况下,我希望所有人都能自动升级。
答案 0 :(得分:1)
没有。 Java没有隐式构造函数。
答案 1 :(得分:0)
不,你需要明确地构建它:
DoSomethingWithAFoo(new Foo(s));