为什么ServerResponse validResponse这句没有指定ServerResponse泛型类型呢?

来源:6-3 登出,注册,校验功能开发

wendy_z

2017-12-29

为什么不写成ServerResponse<String> validResponse呢? 

public ServerResponse<String> register(User user){
   ServerResponse validResponse = this.checkValid(user.getUsername(),Const.CURRENT_USER);

写回答

2回答

走在恩平的乡非青年

2017-12-29

个人觉得:

    泛型的作用是在编译期起类型检查作用,让编译器来帮我们码农检查类型转换异常,编译过后到class文件之后,泛型是会被擦除的,所以泛型在运行时是不起什么作用的。

    项目很多地方用到泛型,起的作用也是让编译器帮我们检查类型转换而已,因为我们服务端还要跟客户端交互,所以有泛型的限定,可以帮助客户端更好的发现类型转换的问题

    至于你提的为什么那个地方不用泛型,是因为类泛型限定之后,没有强制要求一定要使用的,所以下面几种写法都可以通过编译

Map map = new HashMap();
Map<String,Object> map1 = new HashMap();
Map map2 = new HashMap<String,Object>();
Map<String,Object> map3 = new HashMap<String,Object>();

而且我们知道这个地方类型转换没有问题,我们也只在那个方法里面调用了那个对象,其它地方没有调用它,所以不用泛型影响不大(当然用泛型更好,看上去更规范)。所以加<String>也可以,不加也可以,但是如果泛型写成<User>,就会编译出错,因为类型转换出错了(右边this.checkValid返回的泛型是<String>)

1
2
wendy_z
非常感谢!
2017-12-30
共2条回复

Geely

2017-12-30

你好,同学这个看业务场景,有的一些相对简单的就没有写。另外还有一个,如果方法返回值是不同的泛型的时候,也是可以不使用的。因为不能指定里面的泛型。


@慕田峪1359938 看看这个同学的回答,我看了下,非常赞

最近年底加班比较多,回复晚了,还请同学海涵呀~~

元旦快乐!!


【【看帖子看帖子看帖子】】,重要的说三遍哈


我给大家整理了这个,有问题可以来看看先找一下。 肯定有你想要的哈


部署环境的话 ,建议看下文章最后一小段哟~首先跟着课程阿里云部署那个章节过一遍,可以先不跟着操作,做到心里有数,环境部署都做了什么。


尽快进入咱们QQ群哟~~进群方法下面思维导图那个帖子有。非常详细


课程项目思维导图及线上环境、测试环境、部署linux和windows等解答

http://www.imooc.com/article/20193 


0
0

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9476 学习 · 8804 问题

查看课程