Java 中的嵌套通用转换

Nested generic casting in Java

我在编写抽象 bean 容器时遇到了一些问题 class。

我创建了一个接口 ImyAppsBean :

public interface ImyAppsBean{}

现在我想在我的抽象容器中实现一个排序方法class。我想假设 ImyAppsBean 的实例也实现了接口 Comparable,所以我可以使用 Collections.sort 用于对我的 ImyAppsBean 对象的内部列表进行排序。因此,我需要将我的 ImyAppsBean 对象列表转换为 Comparable 对象列表,但不知道如何执行此操作。我的代码是这样的,第 6 行的嵌套泛型导致语法错误:

public abstract class AbstractBeanContainer(){

    protected static List<ImyAppsBean> beanList;

    protected static void sort(){
      Collections.sort((List<Comparable<ImyAppsBean>>) beanList);
    }
}

谁能告诉我如何解决这个问题?

您可以通过让您的接口扩展 Comparable<ImyAppsBean>:

来强制您的接口的所有实现都实现 Comparable<ImyAppsBean>
public interface ImyAppsBean extends Comparable<ImyAppsBean>

然后你就可以调用 Collections.sort(beanList) 而无需任何转换。

您的界面没有扩展 Comparable。 您想如何将 List<ImyAppsBean> 转换为 List<Comparable<ImyAppsBean>> ?此外,要对列表进行排序,强制转换是无用的,因为如果 List 的泛型是 Comparable.

的实例就足够了

在界面中扩展 Comparable :

public interface ImyAppsBean extends Comparable<ImyAppsBean>{
...
}

在你的具体实现它 class :

public class MyAppsBean implements ImyAppsBean{

    ...
    public int compareTo(MyAppsBean o){
          ....
    }
    ...
}

并以这种方式简化您的代码:

public abstract class AbstractBeanContainer(){

    protected static List<ImyAppsBean> beanList;

    protected static void sort(){
      Collections.sort(beanList);
    }
}