Java 使静态嵌套类构造函数参数立即可用的最佳方法?

Java 使静态嵌套类构造函数参数立即可用的最佳方法?,java,oop,Java,Oop,这里有一个例子来说明我的意思: class Foo { Object testObj1; Object testObj2; Foo.Bar BarObj = new Foo.Bar(testObj1, testObj2); Object BarObj1 = BarObj.obj1; static class Bar { public Object obj1; public Object obj2;

这里有一个例子来说明我的意思:

class Foo 
{
    Object testObj1;
    Object testObj2;

    Foo.Bar BarObj = new Foo.Bar(testObj1, testObj2);
    Object BarObj1 = BarObj.obj1;

    static class Bar
    {
        public Object obj1;
        public Object obj2;

        public Bar(Object obj1, Object obj2)
        {
            this.obj1 = obj1;
            this.obj2 = obj2;
        }
    }

}
我想创建一个静态嵌套类,使其构造函数参数立即可用于任何实例化它的类,这是最好的方法吗

编辑:好吧,当你不太擅长Java时,组织一个问题有点困难。我是一名中级android开发人员,基本上,BarObj应该包含与android中特定功能相关的对象,例如一个3按钮菜单。每个按钮都包含一些对象资源,图像对象包含按钮图像,文本对象包含按钮文本等

所以我想把每个按钮和它自己的资源封装成一个对象,这样我就可以把这个按钮对象解析成一个函数。单击按钮时操纵按钮图像。这有意义吗?以下是一些更新的代码:

class Foo 
{
    Object Button1Image;
    Object Button1Text;

    Object Button2Image;
    Object Button2Text;

    Foo.Button Button1Obj = new Foo.Button(Button1Image, Button1Text);
    Object Button1ObjImage = Button1Obj.obj1;

    static class Button
    {
        public Object obj1;
        public Object obj2;

        public Button(Object obj1, Object obj2)
        {
            this.obj1 = obj1;
            this.obj2 = obj2;
        }
    }

}

类似的方法有什么问题

class Foo 
{
    ButtonInformation[] buttons = new ButtonInformation[]{
      new ButtonInformation(image1, "Button 1"),
      new ButtonInformation(image2, "Button 2"),
      new ButtonInformation(image3, "Button 3")
    };

    class ButtonInformation
    {
        public Image buttonImage;
        public String buttonText;

        public ButtonInformation(Image buttonImage, String buttonText)
        {
            this.buttonImage = buttonImage;
            this.buttonText = buttonText;
        }
    }
}
要访问按钮的信息,您可以这样做(在Foo类中):


你为什么要这么做?我宁愿提供一个
getBarObj1()
方法,该方法有一个
返回this.barObj1.obj1行。是的,但问题是你为什么要这样做?不!!!这不是线程安全的!让你的班级成为单身什么的。您的用例是什么??你想解决什么问题?这是android开发的问题,基本上我需要一个只包含其他对象的对象。或者这是不必要的?它严格用于将某些对象封装到特定功能中。然后在
Foo
之外创建它,除非它必须是密封的。然后,遵守标准的JavaBean约定。绝对没有错!我没想过要这样做。我假设ButtonInformation中的方法按钮也应该被称为ButtonInformation,以使其成为类的构造函数?你会说让按钮参数对Foo可用的方式是最好的方式(将它们声明为公共的,然后在构造函数中分配它们)?啊。。你是对的,应该是构造函数。内部类的字段已经声明为public,因此您可以从封闭类中使用它们。如果您只需要Foo类内部的ButtonInformation类,那么这就是实现它的方法。如果您需要从外部Foo创建ButtonInformation,您需要做一些不同的事情。基于您的代码,我假设您只需要在Foo类中使用它:)。如果不是这样,请告诉我。我通常会将ButtonInformation设置为接口,并通过get/set方法访问成员,但您的用例似乎更适合此解决方案。内部类(非静态的嵌套类)包含对封闭类的引用。隐式地说,这意味着您不能在没有封闭类实例的情况下进行实例化。静态嵌套类没有这个,所以它只是一个简单的嵌套类。请参见此处:它还取决于调用方模式:)。但基本上就是这样。
function doSomething(int button) {
   // make sure button is less than the buttons.length.
   Image buttonImage = buttons[button].buttonImage
   String buttonText = buttons[button].buttonText;
}