我可以为Java类创建非显式构造函数吗?

时间:2010-08-05 17:21:53

标签: java

默认情况下,如果存在适当的构造函数(并且未声明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类的等价物具有来自几个基本类型以及几个对象类型(每个构造函数只接受一个参数)的构造函数。理想情况下,我希望所有人都能自动升级。

2 个答案:

答案 0 :(得分:1)

没有。 Java没有隐式构造函数。

答案 1 :(得分:0)

不,你需要明确地构建它:

 DoSomethingWithAFoo(new Foo(s));