繁体   English   中英

Java在C#中初始化类,就像在C#中一样

[英]Java initialize class in style like in C#

我是Java的基础,因为我是全职的C#开发人员,但我需要在Android中制作一些私人项目。

在C#中我可以这样做:

public class Test
{
    public string A {get;set;}
    public OtherClass B {get;set;}
}

public OtherClass ()
{
    string Some {get;set;}
    string Again {get;set;}
}

现在,当我想使用类测试时,我可以执行以下代码:

var test = new Test
{
    A = "test",
    B = new OtherClass
    {
        Some = "Some",
        Again = "Again"
    }
};

感谢现在我已经以明确的方式初始化了测试。

当我想在Java中执行此操作时,我必须使代码如下:

public class Test
{
    private string A;
    public string GetA()
    {
        return A;
    }
    public void SetA(string a)
    {
        A = a;
    }

    privte  OtherClass B;
    public OtherClass GetB()
    {
        return B;
    }
    public void SetB(OtherClass b)
    {
        B = b;
    }
}



public class OtherClass
{
    private string Some;
    public string GetSome()
    {
        return Some;
    }
    public void SetSome(string some)
    {
        Some = some;
    }

    privte  string Again;
    public string GetAgain()
    {
        return Again;
    }
    public void SetAgain(string again)
    {
        Again = again;
    }
}

我知道Java必须有Seter和Geter才能使用,但我现在可以使用它,但现在如果我想使用Test对象,就像我在C#中使用它一样,我必须做类似的事情:

OtherClass otherClass = new OtherClass();
otherClass.SetSome("Some");
otherClass.SetAnothier("Another");
Test test = new Test();
test.SetA("A")
test.SetB(otherClass);

IMO这不是一个好的和明确的声明。 我知道我可以添加如下构造函数:

public Test(string a, otherClass b)
{
    A = a;
    B = b;
}

public OtherClass(string some,string another)
{
     Some = some;
     Another = another;
}

并使用它像:

Test test = new Test("Test",new OtherClass("some","Another"));

但是当我有更复杂的类(例如200字段(是的,我有))时,构造函数将很长并且很难读取它。

那么我可以用我向你展示的其他方式在Java中初始化类吗?

谢谢

实际上你也可以在java中使用object initializers ,但是它们被称为double brace initializers 例:

Test test = new Test()
{{
    SetA("test");
    SetB(new OtherClass()
    {{
        SetSome("Some");
        SetAgain("Again");
    }});
}};

但是你可能不应该使用它,因为它有一些奇怪/意想不到的副作用。 此示例为TestOtherClass生成AnonymousInnerClass 您可以在此处阅读有关双支撑初始化器的更多信息

如果您有比您希望传递构造函数更多的参数,则可以使用此答案建议的构建器模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM