Java 从方法返回对象
我定义了一个名为“findRegion()”的方法,返回类型为“Screen”。即使在方法的末尾返回了一个“Screen”对象,EclipseIDE仍然会显示一个关于返回类型不匹配的错误。方法如下:Java 从方法返回对象,java,Java,我定义了一个名为“findRegion()”的方法,返回类型为“Screen”。即使在方法的末尾返回了一个“Screen”对象,EclipseIDE仍然会显示一个关于返回类型不匹配的错误。方法如下: public Screen findRegion(){ try{ Screen screen = new Screen(); int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\
public Screen findRegion(){
try{
Screen screen = new Screen();
int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10;
int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10;
int w = x + 370;
int h = y + 300;
screen.setRect(x,y,w,h);
return screen;
}
catch(FindFailed e){
e.printStackTrace();
}
}
此代码的目标是创建具有相应尺寸的区域。
请指出我代码中的错误。
谢谢由于您的try-catch块而发生错误。如果发生错误(
FindFailed
),该怎么办?那你就什么都不退了
try {
Screen screen = new Screen();
int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10;
int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10;
int w = x + 370;
int h = y + 300;
screen.setRect(x,y,w,h);
return screen;
} catch (FindFailed e) {
e.printStackTrace();
// what to do if this happens?
// proper error handling must be done here. Either return 'null' or propagate the error to the calling method!
}
// you can even make a return statement here if it is more convenient for you
您的方法必须具有默认的返回语句 (参见返回语句的注释) 最佳实践是该方法只有一个返回语句。然后你的代码变成了
public String findRegion(){
Screen screen= null;
try{
screen = new Screen();
int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10;
int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10;
int w = x + 370;
int h = y + 300;
screen.setRect(x,y,w,h);
}
catch(FindFailed e){
e.printStackTrace();
}
return screen;
}
在try块之前声明屏幕对象(您可以在catch中初始化它),并在catch块之后返回它。如果您正在捕获异常,那么您也需要从那里返回一些内容。或者你也可以像下面这样
public Screen findRegion(){
Screen screen = null;
try{
screen = new Screen();
int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10;
int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10;
int w = x + 370;
int h = y + 300;
screen.setRect(x,y,w,h);
}
catch(FindFailed e){
e.printStackTrace();
}
return screen;
}
由于如果发生
FindFailed
异常,则不会返回任何内容,因此eclipse显示返回类型不匹配
您应该执行以下类型的代码:
public Screen findRegion(){
Screen screen = null; //initialize your variable here with null
try{
screen = new Screen();
int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10;
int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10;
int w = x + 370;
int h = y + 300;
screen.setRect(x,y,w,h);
}
catch(FindFailed e){
e.printStackTrace();
}
return screen; //return screen object if all goes well or null if any exception occurs.
}
注意:看起来FindFailed
是您的自定义异常
,您应该编写以异常结尾的自定义异常类名(它减少了混淆,看起来像异常)
如果出现错误,函数将跳过try块“return语句”,并且不会返回任何内容。我相信这就是问题所在。关键是在方法的一条路径的末尾,返回一个
屏幕对象。如果您的代码抛出异常,那么将返回什么?如果出现异常,您不会返回任何内容。如果抛出异常,将不会返回任何内容,因为return语句位于try块中。“Eventhough在我的方法末尾,我返回一个“Screen”对象”这根本不正确。@user3796719-重要的问题是。。。你明白为什么吗?
public Screen findRegion(){
Screen screen = null; //initialize your variable here with null
try{
screen = new Screen();
int x = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getX() - 10;
int y = screen.find("C:\\Users\\skhan\\Desktop\\Images\\VVX500\\Capture2.PNG").getY() - 10;
int w = x + 370;
int h = y + 300;
screen.setRect(x,y,w,h);
}
catch(FindFailed e){
e.printStackTrace();
}
return screen; //return screen object if all goes well or null if any exception occurs.
}