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);
}
}
我在编写抽象 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);
}
}