当前位置:  开发笔记 > 编程语言 > 正文

通用方法失败

如何解决《通用方法失败》经验,为你挑选了1个好方法。

我通过调整书中的一篇文章来编写这个简单的测试代码,以帮助我理解Java中泛型方法的工作.我标记的那条线应该可以工作,为什么不呢?

import java.util.*;

class Test {
public static void main(String args[]){
    List input = null;
    List output=null;

    output = Test.process(input); // fail, why??

    } 
public static  List  process (List  nums){

    List eList = new ArrayList();
    return eList;
    }

}

编辑:嗯,代码在更改时List有效List,这很好,但我仍然不确定我是否可能遗漏了某些内容,或者我从中获取的这本书可能有错误.请阅读那里出现的问题:

    给定一个声明为的方法:

public static List <?super E> process(List nums)

程序员想要像这样使用这个方法:

// INSERT DECLARATIONS HERE
    output = process(input); 

可以在// INSERT DECLARATIONS这里放置哪些声明对以允许代码编译?(选择所有适用的选项.)

A. ArrayList input = null;
   ArrayList output = null;

B. ArrayList input = null;
   List output = null;

C. ArrayList input = null;
   List output = null;

D. List input = null;
   ArrayList output = null;

E. List input = null;
   List output = null;

F. List input = null;
   List output = null;

G. None of the above.

答案:B,E和F是正确的.返回类型的进程肯定被声明为a List,而不是a ArrayList,因此A和D是错误的.C是错误的,因为返回类型的计算结果为List,并且无法将其赋值给类型的变量List.当然所有这些都可能导致 NullPointerException因为变量仍然是空的 - 但问题只是要求我们让代码进行编译.

本书中提到的所有选项都没有对我的代码起作用.我可以安全地将其标记为Kathy Sierra的错误,或者我在这里遗漏了什么?



1> Fabian Steeg..:

问题是您声明方法的返回类型为

List, i.e. List

但是把它分配给一个

List

所以你应该将它分配给一个

List

或者将返回类型声明为

List i.e. List

(详细格式化,因为内联代码不能正确显示泛型.)

如果书中声称可以按照你描述的方式分配方法的返回值,那么这本书似乎确实是错误的.如果方法返回E列表(如上所述)将是正确的.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有