[英]Basic Java type casting issue
我有一个名为DataHandler的接口,其中包括以下声明:
public List<Object> getIt();
而ProjectSet类实现此接口。
此类处理Project对象,并且ProjectSet类的getIt()方法的实现应返回Project列表,例如:
List<Project>
如何用Java做到这一点?
问候,杰拉德
您可以通过在接口中将方法声明为以下方式来利用Java中的泛型 :
public interface DataHandler<T> {
public List<T> getIt();
}
这意味着DataHandler
接口绑定到特定的未知类型T
getIt()
方法返回该类T
的List
。 换句话说,可以将其视为DataHandler
将处理类T
对象 。
然后提供您的实现,指定ProjectSet
将是一个处理Project
对象的DataHandler
:
public class ProjectSet implements DataHandler<Project> {
public List<Project> getIt() { }
}
您可能会发现Java教程的这一课很有用。
public List<T> getIt();
在您的界面中
像这样
public interface MyInterface<T> {
public List<T> getIt();
}
然后用
implements MyInterface<Project>
您不能以这种方式在Java中执行此操作。
我的解决方案是让数据处理程序通用
public interface DataHandler<T> {
public List<T> getIt();
}
那你就可以
public ProjectSet implements DataHandler<Project> {
public List<Project> getIt() { ... }
}
您有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")
,但是行得通!,您可以添加@SuppressWarnings("unchecked")
来跳过警告。
class ProjectSet implements DataHandle {
List<Object> getIt() {
List<Object> retObject = ... ;
for (Project p : getProjects()) {
retObject.add(p);
}
return retObject;
}
}
这只是丑陋!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.