使用带有List作为方法参数的java泛型并抛出泛型异常的编译器错误

时间:2015-04-29 12:09:27

标签: java generics interface

我在项目中使用泛型时遇到编译器错误。我生成了一个示例代码:

我的Bean接口

privateFunction

My Bean Concrete Class

package sample;

public interface MyBeanInterface {
  Long getId();
  String getName();
}

我的经理界面

package sample;

public class MyBean implements MyBeanInterface {
    private Long id;
    private String name;

    @Override
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

My Manager Concrete Class

package sample;

import java.util.List;

public interface MyManagerInterface<T extends MyBeanInterface> {

    <EXCEPTION extends Exception> List<T> sortAll(List<T> array) throws EXCEPTION;

    List<T> sortAll2(List<T> array);

    <EXCEPTION extends Exception> List<T> sortAll3() throws EXCEPTION;

}

我尝试在接口中使用方法sortAll而没有方法参数(sortAll())并且它编译,只使用接口中的异常也可以工作,但是两者都没有。

感谢。

1 个答案:

答案 0 :(得分:2)

关于sortAll(List<T> list)方法,你必须这样做:

@Override
public <E extends Exception> List<T> sortAll(List<T> array) throws E {
    // TODO Auto-generated method stub
    return null;
}

然后,在调用方法时显式设置方法type-parameter:

try {
    new MyConcreteManager().<IOException>sortAll(...);
} catch (IOException e) {

}

sortAll3()实现编译得很好,因为在Java中,当方法定义覆盖另一个时,不允许抛出额外的已检查异常,但它可能会减少。