0
public interface RMIInterface extends Remote {
    public byte[] geScreen() throws RemoteException;
    public byte[] getProcessList() throws RemoteException;
    public boolean execute(String command) throws RemoteException;
    public boolean messageTo(String msg,String user) throws RemoteException;
    public boolean saveImage(byte[] image,String user) throws RemoteException;
    public byte[][] getimages(String user,String date)throws RemoteException;
}

上面的RMI接口方法抛出RemoteException,如果我把这些方法放在try里面,捕获RemoteException是否可以。

4

4 回答 4

8

您不能在接口中使用 try-catch,因为这里没有实现,只有规范/合同。相反,您可以throws <exception list>像已经完成的那样使用。

于 2013-06-25T04:11:15.127 回答
2

在块中调用这些方法try-catch意味着您正在同一方法本身中处理异常。相反,如果您throws为该方法使用声明,那么它说该方法可以throw发生这种类型的异常,从技术上讲该异常是回避该异常,并且该异常需要由调用该方法的方法处理。

接口情况下

  • 无论您在接口中编写什么方法,public并且abstract
  • 对于编写try-catch,您必须提供方法的实现,如果是接口,您不能这样做。
  • 所以即使你拼命想写try-catch一个界面,你也做不到:)

如果您想在同一方法中处理异常或让调用方法处理它,这取决于您。

这是处理异常的方法的示例

public static void methodWithNoThrows(){
    try{
        throw new Exception();
    }catch(Exception e){
        e.printStackTrace();
    }

}

这是通过声明 throws 的方法闪避和异常的示例

 public static void methodWithThrows() throws Exception{

    throw new Exception();
}

所以调用方法必须处理它

于 2013-06-25T04:01:26.637 回答
2

RMI 中的远程接口方法应该抛出RemoteException. 这些异常必须由调用远程接口声明的方法的客户端捕获。

接口本身无法捕获其中声明的方法抛出的异常。

于 2013-06-25T04:02:43.287 回答
2

Interfaces by themselves are not instantiable (or have method bodies, not until default methods), and thus cannot have try-catch blocks.

However, consider what you're declaring here: every method in this interface now has a checked exception. If you intend to, in the running of this code, actively catch the exception(s) that could be thrown, then there is no value added to declaring those methods as throwing anything. On the other hand, if you want to be explicit in that the code using this API catches any exceptions on its end, then this would be acceptable.

于 2013-06-25T04:15:49.053 回答