Java中的重复方法
我的问题可能很基本,但这是我以前从未做过的事情,所以我假设它在Java中是可能的(我肯定是,我只是不知道怎么做)。基本上,我有3个要操作的对象(3Java中的重复方法,java,methods,Java,Methods,我的问题可能很基本,但这是我以前从未做过的事情,所以我假设它在Java中是可能的(我肯定是,我只是不知道怎么做)。基本上,我有3个要操作的对象(3BufferedImages)。例如,我希望能够更改亮度和对比度,我可以这样做。通过这样做,我必须为每个图像创建一个单独的方法,其中代码完全相同。例如: public void increaseBrightnessGreen() { RescaleOp rescaleOp = new RescaleOp(1.0f, 10, null);
BufferedImage
s)。例如,我希望能够更改亮度和对比度,我可以这样做。通过这样做,我必须为每个图像创建一个单独的方法,其中代码完全相同。例如:
public void increaseBrightnessGreen() {
RescaleOp rescaleOp = new RescaleOp(1.0f, 10, null);
rescaleOp.filter(greenImage, greenImage);
updateGreen();
}
然后对红色和蓝色进行重复,然后再重复3次以降低亮度,这是相当多的代码,它们正在做非常类似的事情。当然,这种情况非常常见,亮度示例只是众多示例中的一个,导入图像的方法是相同的,只是更改了一些变量,对比度也与上面类似。我不知道这是否重要,但我所有的代码都在一个单独的类中
正如我所说,我确信有一种方法可以减少所有这些多余的代码重复,我只是不知道如何做。让该方法接受它应该修改的参数。它还可以接受
重新缩放
,因此您不需要创建它3次(并允许不同的重新缩放
s)
public void increaseBrightness( BufferedImage image )
{
RescaleOp rescaleOp = new RescaleOp( 1.0f, 10, null );
rescaleOp.filter( image, image );
// Don't know what updateGreen does but you could probably do something similar there
updateImage( image );
}
然后,使用要增加亮度的图像调用该方法
increaseBrightness( greenImage );
increaseBrightness( redImage );
increaseBrightness( blueImage );
并在创建
重新缩放后调用
RescaleOp rescaleOp = new RescaleOp( 1.0f, 10, null );
increaseBrightness( greenImage, rescaleOp );
increaseBrightness( redImage, rescaleOp );
increaseBrightness( blueImage, rescaleOp );
当然,有一种方法可以避免重复方法,使其更通用!但在本例中,您也必须重复足够的代码
首先,在课堂上做3个静态:
static int GREEN = 1;
static int RED = 2;
static int BLUE = 3;
然后,让你的方法成为“一对所有”
public void adjustBrightness(int color, boolean increase) {
if (increase){
if (color == BLUE){
//code for blue increment
}
if (color == GREEN){
//code for green increment
}
if (color == RED){
//code for red increment
}
else{ //decrease brightness
if (color == BLUE){
//code for blue
}
if (color == GREEN){
//code for green
}
if (color == RED){
//code for red
}
}
}
您可以很好地使用
调整亮度(蓝色,真实)
或者,如果您想让它更像本地语音,请再做两个静态:
static boolean INCREASE = true;
static boolean DECREASE = false;
因此,现在您可以:
adjustBrightness(BLUE, INCREASE);
与上一个问题相同;这个问题似乎与主题无关,因为它是关于代码改进而不是代码修复的。请参阅这是本体图的位置。您正在谈论将参数传递给方法吗?因此您将调用increaseBrightness(图)
该函数将处理R、G和B通道?然后您肯定可以删除递增亮度绿色
,递增亮度红色
,递增亮度蓝色
方法,并将它们组合成一个。在有枚举
的情况下,不要使用这样的静态。它们增加了类型s的优点安全,如果你真的坚持使用静态,至少让它们成为最终的。我当然同意,你是完全正确的。它们必须是最终的。。。
adjustBrightness(BLUE, INCREASE);