基本的Java类型转换问题

时间:2014-04-30 11:17:07

标签: java

我有一个名为DataHandler的接口,其中包括以下声明:

public List<Object> getIt();

而ProjectSet类实现此接口。

此类处理Project对象,ProjectSet类的 getIt()方法的实现应返回Projects列表 像:

List<Project>

如何在Java中执行此操作?

此致 杰拉德

4 个答案:

答案 0 :(得分:3)

您可以通过在界面中将方法声明为:

来利用Generics in Java
public 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个选项:

将界面更改为Generic:

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;
    }
 }

这只是丑陋!。

相关问题