如何指定要调用的类的哪个构造函数?

时间:2015-04-19 19:11:41

标签: java

我正在从另一个类创建一定数量的对象,并尝试使用java.awt.Color为每个类随机化颜色。

for (int i = 0; i < numBalls; i++){       
    ballsInSim.add(
        new BoxBall(
            0,
            0,
            (int) boxWidth,
            (int) boxHeight,
            rng.nextInt(35) + 15,
            rng.nextInt(500) + 25,
            rng.nextInt(500) + 25,
            Color.BLUE, // Create new Colour here using constructor
            myCanvas
        )
    );
}

当前Color.BLUE,我想调用Color的构造函数之一,它使用三个整数作为红色,绿色和蓝色值(Color(int r,int g,int b))。< / p>

如何调用该构造函数?我对Java比较陌生,而且我在解决这个问题时遇到了一些麻烦。

6 个答案:

答案 0 :(得分:1)

如果使用您想要的参数调用构造函数,编译器将选择正确的参数。

答案 1 :(得分:1)

为了达到你想要的效果,只需添加以下内容:

new Color(0, 0, 255)

所以从本质上讲,它看起来像这样:

ballsInSim.add(new BoxBall(0, 0, (int) boxWidth, (int) boxHeight, rng.nextInt(35) + 15, rng.nextInt(500) + 25, rng.nextInt(500) + 25, new Color(0, 0, 255), myCanvas));

每次都要获得随机颜色:

Random R = new Random(256);
Random G = new Random(256);
Random B = new Random(256);

//your color constructor will then be:
new Color(R.nextInt(), G.nextInt(), B.nextInt());

要了解有关Color Class的更多信息,请参阅:Color: Java 7

希望这有帮助

答案 2 :(得分:1)

关于实际问题:Color有多个构造函数。其中一些只在参数类型上有所不同,即:

Color(float r, float g, float b)
Color(int r, int g, int b)

致电时

Color c = new Color(r,g,b);

关于调用哪个构造函数的问题实际上有点棘手:它取决于给定参数的类型。有关详细信息,请参阅Java语言规范的Section 15.9.3. Choosing the Constructor and its Arguments

但是,在这种情况下,您可以简化:如果传入三个float值,则会调用float版本。如果您传入三个int值,则会调用int版本。

关于实施:如果您打算创建随机颜色,我建议您创建一个小帮手方法:

private static final Random COLOR_RANDOM = new Random(0);

private static Color createRandomColor() {
    int r = COLOR_RANDOM.nextInt(256);
    int g = COLOR_RANDOM.nextInt(256);
    int b = COLOR_RANDOM.nextInt(256);
    return new Color(r,g,b);
}

然后,您可以随处调用此方法,例如......

for (int i = 0; i < numBalls; i++)
{       
    ballsInSim.add(new BoxBall(0, 0, (int) boxWidth, (int) boxHeight,
        rng.nextInt(35) + 15, rng.nextInt(500) + 25, rng.nextInt(500) + 25, 
        createRandomColor(),  // <---- ... here!
        myCanvas));
}

答案 3 :(得分:1)

相当简单,Java根据您提供给构造函数的参数选择要使用的构造函数。如果是Color,您有7个选项,如下所示:

Color(ColorSpace cspace, float[] components, float alpha)

使用float数组和指定alpha中指定的颜色分量在指定的ColorSpace中创建颜色。

Color(float r, float g, float b)

使用指定的红色,绿色和蓝色值(0.0 - 1.0)创建不透明的sRGB颜色。

Color(float r, float g, float b, float a)

使用指定的红色,绿色,蓝色和alpha值(范围为0.0 - 1.0)创建sRGB颜色。

Color(int rgb)

使用指定的组合RGB值创建不透明的 sRGB 颜色,该值由位16-23中的红色分量,位8-15中的绿色分量和位0-7中的蓝色分量组成

Color(int rgba, boolean hasalpha)

使用指定的组合RGBA值创建 sRGB 颜色,该值包含位24-31中的alpha分量,位16-23中的红色分量,位8-15中的绿色分量,以及位0-7中的蓝色分量。

Color(int r, int g, int b)

使用指定的红色,绿色和蓝色值(0 - 255)创建不透明的sRGB颜色。

Color(int r, int g, int b, int a)

使用指定的红色,绿色,蓝色和Alpha值(范围为0 - 255)创建 sRGB 颜色。

如果您提供三个 ints ,将使用最后一个。如果有三个浮动,它将是第三个。

在您的情况下,您只需将Colour.BLUE替换为:

new Colour(
    new Random().nextInt(256),
    new Random().nextInt(256),
    new Random().nextInt(256),
)

答案 4 :(得分:0)

假设你在this constructor之后,那么

new Color(r, g, b)

使用该构造函数实例化类,其中rgb是对应于红色,绿色和蓝色的变量/字段。

答案 5 :(得分:0)

这样做:

ballsInSim.add(new BoxBall(0, 0, (int) boxWidth, (int) boxHeight, rng.nextInt(35) + 15, rng.nextInt(500) + 25, rng.nextInt(500) + 25, new Color(r, g, b), myCanvas));}

其中r, g, b先前已定义0到255之间的随机整数;