我有一个名为DataHandler的接口,其中包括以下声明:
public List<Object> getIt();
而ProjectSet类实现此接口。
此类处理Project对象,ProjectSet类的 getIt()方法的实现应返回Projects列表 像:
List<Project>
如何在Java中执行此操作?
此致 杰拉德
答案 0 :(得分:3)
您可以通过在界面中将方法声明为:
来利用Generics in Javapublic interface DataHandler<T> {
public List<T> getIt();
}
这意味着DataHandler
接口与特定的未知类型T
相关联。 getIt()
方法返回该类List
的{{1}}。换句话说,它可以被视为 T
将处理类DataHandler
的对象。
然后提供您的实施,指定T
将是ProjectSet
处理DataHandler
个对象:
Project
您可能会发现this lesson of the Java Tutorials有用。
答案 1 :(得分:1)
public List<T> getIt();
在您的界面中
喜欢这个
public interface MyInterface<T> {
public List<T> getIt();
}
然后用
实现它implements MyInterface<Project>
答案 2 :(得分:0)
你不能用java这样做。
我的解决方案是让数据处理程序是通用的
public interface DataHandler<T> {
public List<T> getIt();
}
然后你可以做
public ProjectSet implements DataHandler<Project> {
public List<Project> getIt() { ... }
}
答案 3 :(得分:0)
您有3个选项:
interface DataHandler<T> {
List<T> getIt();
}
class ProjectSet implements DataHandle<Project> {
List<Project> getIt() {
...
}
}
这很难,因为您需要更改接口,并重构所有实现DataHandler
的类。这个问题不是一个选择。
列表的类型信息在运行时消失了,为此,所有List类型在运行时都等于,并且等于Object,所以你可以这样做:
class ProjectSet implements DataHandle {
List<Object> getIt() {
...
return (List) projectList;
}
}
这很丑,但有效!,您可以添加@SuppressWarnings("unchecked")
来跳过警告。
class ProjectSet implements DataHandle {
List<Object> getIt() {
List<Object> retObject = ... ;
for (Project p : getProjects()) {
retObject.add(p);
}
return retObject;
}
}
这只是丑陋!。