Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中的接口方法中引发多个异常_Java - Fatal编程技术网

在java中的接口方法中引发多个异常

在java中的接口方法中引发多个异常,java,Java,我想问,如何在我的界面中提到这一点 public class find(int x) throws A_Exception, B_Exception{ ---- ---- --- } 我想说,我可以在一个接口中提到一个异常,但如何在我的接口中提到我的方法将抛出两个异常,即A和B 上面提到的代码片段只适用于A,不适用于B。。。帮助 public interface dictionary{ public void insert(int x) throws Dictionary_FullEx

我想问,如何在我的界面中提到这一点

public class find(int x) throws A_Exception, B_Exception{
----
----
---
}
我想说,我可以在一个接口中提到一个异常,但如何在我的接口中提到我的方法将抛出两个异常,即A和B

上面提到的代码片段只适用于A,不适用于B。。。帮助

public interface dictionary{ 
   public void insert(int x) throws Dictionary_FullException, Duplicate_Element_FoundException; 
}
...
 public class SortedArray implements dictionary{ 
   public void insert(int x) throws Dictionary_FullException, Duplicate_Element_FoundException {
 ---------
}
但是当我编译它的时候。。。上面写着

java:66:insert(int)in assign.SorterDarray无法实现 在assign.dictionary中插入(int); 重写的方法不会引发 assign.SortedArray.Duplicate\u元素\u FoundException public 无效插入(int x)抛出 字典\u完全例外


您需要在可以引发异常的方法上指定它。如果它可以引发超过1种类型的异常,您只需用“,”分隔它们。 e、 g


可以为接口方法声明任意数量的异常。但是你在问题中给出的类是无效的。应该是

public class MyClass implements MyInterface {
  public void find(int x) throws A_Exception, B_Exception{
    ----
    ----
    ---
  }
}
然后一个界面看起来像这样

public interface MyInterface {
  void find(int x) throws A_Exception, B_Exception;
}

我想你要求的是下面的代码:

public interface A
{
    void foo() 
        throws AException;
}

public class B
    implements A
{
    @Overrides 
    public void foo()
        throws AException,
               BException
    {
    }
}
除非BeException是AEException的子类,否则这将不起作用。重写方法时,必须符合父级提供的签名,异常是签名的一部分

解决方案是声明接口,接口也抛出一个beexception

原因是您不希望看到这样的代码:

public class Main
{
    public static void main(final String[] argv)
    {
        A a;

        a = new B();

        try
        {
            a.foo();
        }
        catch(final AException ex)
        {
        }
        // compiler will not let you write a catch BException if the A interface
        // doesn't say that it is thrown.
    }
}
如果B::foo抛出一个BeException,会发生什么?该计划将不得不退出,因为它可能没有捕获。为了避免这种情况,子类不能更改抛出的异常类型(除非它们可以从列表中删除异常)。

公共类查找(int x)
,这是否编译过?这与接口有什么关系?
public class Main
{
    public static void main(final String[] argv)
    {
        A a;

        a = new B();

        try
        {
            a.foo();
        }
        catch(final AException ex)
        {
        }
        // compiler will not let you write a catch BException if the A interface
        // doesn't say that it is thrown.
    }
}