对 Java 泛型的顶级理解

2023-06-10 09:43:30 +08:00
 mannixSuo
public abstract class ServiceA<SEAL extends SealServerServiceAbst<F, FPR, FSUP, FGD, FFE, FSTP, FMBF>,
        F extends ApplyCommon<FPR, FSUP, FGD, FFE, FSTP, FMBF>,
        FPR extends ApplyPartnerCommon<FMBF>, 
        FSUP extends SubPlanCommon, FGD extends CmContGoodCommon,
        FFE extends  FileCommon,
        FSTP extends  StampCommon, 
        FMBF extends  FileCommon,
        V extends  ApplyCommon<VPR, VSUP, VGD, VFE, VSTP, VMBF>,
        VPR extends  ApplyPartnerCommon<VMBF>, 
        VSUP extends  SubPlanCommon, VGD extends  GoodCommon,
        VFE extends  FileCommon,
        VSTP extends  StampCommon, VMBF extends  FileCommon>
        extends ServiceB< Apply,  ApplyMapper>
        implements TopService<V, VPR, VSUP, VGD, VFE, VSTP, VMBF> {
        // 一些业务逻辑
        }

前几天看到其他人写的一段代码,一眼给我看蒙了。 问了他才知道,因为和前端对接使用了 DTO ,FORM 两种参数类型,然后又和其他模块对接,又使用了一种参数类型。 他呢就把这几个参数抽象成泛型,在定义一个的抽象 service 如上,每种 service 处理不同类型的参数。 按我的理解,不管是前端交互还是给其他服务调用,就算参数不一样,一个 service 也能够进行处理啊。 他这个是不是过度设计了?

6860 次点击
所在节点    程序员
66 条回复
auh
2023-06-10 11:15:50 +08:00
顶级的理解,只在他的脑子里面。这防离职代码写的好
oaix
2023-06-10 11:27:00 +08:00
只要我看不懂的代码:过度设计,只要看不懂我写的代码:辣鸡🐶
iamzuoxinyu
2023-06-10 11:31:23 +08:00
一股子 Rust 味儿
iOCZ
2023-06-10 11:31:46 +08:00
写代码要考虑读代码的人的心智负担
NextWorld
2023-06-10 11:39:47 +08:00
把 Java 泛型用成了 c++模板的样子了
mannixSuo
2023-06-10 11:50:54 +08:00
@beneo 怎么一股子 chatGpt 的味道
mannixSuo
2023-06-10 11:52:48 +08:00
@agagega C++如此离谱吗?但是把我感觉写代码是给人看的,要人能看得懂才行
Slurp
2023-06-10 11:53:33 +08:00
闹麻了,扯 C++ Rust 都是看不懂的归于一类是吧?
wolfie
2023-06-10 12:00:13 +08:00
纯傻吊设计

不看需求,过度设计,限制一堆,
未来需求变更 扩展麻烦。
可读性差 别人没法接手不说,未来自己都有可能看不懂。
xingda920813
2023-06-10 12:04:13 +08:00
@wanguorui123 This is incorrect. 是擦除到第一个原始上界, <T extends Comparable<Number> & Serializable> 会被擦除为 Comparable (raw type), 而不是 Object.
TWorldIsNButThis
2023-06-10 12:37:29 +08:00
名字缩写问题比较大

其他没什么看不懂的 问题是要不要这么做

java 泛型复杂不了,又不是 ts 能写逻辑
6IbA2bj5ip3tK49j
2023-06-10 13:30:54 +08:00
Java 业界最大的问题就是这种傻逼的抽象太多了。
wanguorui123
2023-06-10 13:43:43 +08:00
@xingda920813
Java 泛型的实现是靠类型擦除技术实现的,类型擦除是在编译期完成的,也就是在编译期,编译器会将泛型的类型参数都擦除成它指定的原始限定类型,如果没有指定的原始限定类型则擦除为 object 类型,之后在获取的时候再强制类型转换为对应的类型,因此生成的 Java 字节码中是不包含泛型中的类型信息的,即运行期间并没有泛型的任何信息。
devilweime
2023-06-10 13:52:42 +08:00
功能没啥增加的话,为什么不写个转换,转成一种参数一个 service 处理
Anarchy
2023-06-10 14:21:46 +08:00
就不能多拆几个么,非得挤在一个类里么。这个不是过度设计而是懒得设计。
otakustay
2023-06-10 14:24:53 +08:00
这在 TS 里不就是常规代码么 233
zhuzhibin
2023-06-10 14:32:22 +08:00
傻逼写法 看不懂
someonedeng
2023-06-10 15:05:47 +08:00
牛逼 什么东西
tqyq88
2023-06-10 15:57:14 +08:00
OP 是不是在政企金融之类的地方工作
PTLin
2023-06-10 16:16:55 +08:00
https://s2.loli.net/2023/06/10/AeXgW2TZIt98E75.png 小小的 rs 震撼,不过这种用法不常见。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/947486

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX