接口疑问3?

来源:16-6 登录token超时优化

慕神4535282

2020-11-06

老师,上午好,还是请教那个问题,
我也不想纠结啊,但是我不知道这一点,我怎么写代码呢?
就你告诉我的我都清楚,对于interface GatewayFilter, 需要implements ,那我就知道要写代码来implements GatewayFilter,同理,对于interface Logger, 不需要 implements ,直接拿来用就可以了。那我就知道我只要写代码来调用接口内的 info(), debug()就可以了。

但上述这些都是你告诉我的,那总不可能我每一次遇到一个新的 interface xxx,我都来问你 这个 xxx 我要写代码来 implements 呢?还是直接拿来用就可以了呢?我希望了解的是其中的指导方针,是”渔“而不是”鱼“
对吧,我只有清楚了这一点才能开始动手写代码呀?

我知道你说的:

这没什么纠结应该用方法一还是方法二。每个工具类,每个框架,用法都不一样。

那就把范围缩小到 SpringBoot内,SpringBoot内有这个多interface, 我怎么知道哪些要implements 呢?

public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    ...
    exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); 

这个exchange.getResponse()返回的是一个interface ServerHttpResponse, 你怎么知道后面可以接.setStatusCode(HttpStatus.UNAUTHORIZED);没办法实例化一个 interface的呀,怎么可以调用它的setStatusCode()呢, setStatusCode()方法还没有实现呀?

比如,你的回答可能是以下这样的,这个辨别的指导方针是:
interface 做为方法的返回值时,这个interface可以不用implements ?
或者
SpringBoot中除了 *Filter, 和 Order 这些interface, 其余的 interface 都不需要 implements.
还是什么其它的原因?

所以,一句话,我的疑问就是怎么辨别哪些interface是需要implements 的,哪些不用?重点是怎么辨别,怎么辨别,怎么辨别?

总之,一句话,你希望你的回答可以解决我在写代码时,看到任意一个interface,我心中有数,明白这个interface我是需要implements, 这个只需要调用接口内的方法即可。

谢谢老师指导!

写回答

2回答

甲蛙

2020-11-07

这个还真没有规律,都是多年积累下来的,只能说遇到一个,学习一个,项目做多了,就熟悉了。

比如要做路由自定义拦截器,首先肯定是百度:gateway怎么自定义拦截器,或者查官方文档,有没有自定义拦截器的例子。如果是去研究gateway提供了哪些接口,哪些类,哪些配置项,那这个就是去学习源码了,解决问题的效率低很多,而且不一定学得懂。

0
1
慕神4535282
非常感谢!
2020-11-09
共1条回复

weixin_慕沐6398295

2022-04-23

你的理解存在一些误区,首先这个接口没有具体实现,如果有具体实现(jdk8后,接口的默认方法也就是被default修饰的方法可以有具体实现),那么最终具体的返回值一定会是这个接口的实现类对象(这里的实现类对象赋值给接口引用的情况其实就是接口回调的体现)。在程序真正落地运行时,运行的都会是你看到的接口的实现类,而实现类的方法标注的返回值同样也可以是接口类型,只要最终返回的值是接口的实现类就不会报错。

0
0

Spring Cloud+ Vue前后端分离开发企业级在线视频系统

全网稀缺课程 市场热门项目+主流框架 一课掌握前后端技术

1743 学习 · 1698 问题

查看课程