对 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 也能够进行处理啊。 他这个是不是过度设计了?

7274 次点击
所在节点    程序员
66 条回复
nkidgm
2023-06-10 17:00:55 +08:00
过度设计,这一定程度上耦合过多的泛型类型,应该分层设计啊。
Akitora
2023-06-10 17:08:04 +08:00
还以为是 rust
zhiyu1998
2023-06-10 17:33:15 +08:00
这比 aqs 还难理解
DinnyXu
2023-06-10 17:38:34 +08:00
高级耦合代码,简称屎山......
zgqq
2023-06-10 17:42:32 +08:00
为了 xx ,而 xx
token10086
2023-06-10 17:43:36 +08:00
楼上的有一个算一个,全在第一层。写这个代码的老哥在大气层。
这种人还怕老板裁员吗 ?? 手动狗头!
xuanbg
2023-06-10 19:05:49 +08:00
这个如果不知道该使用什么类型的话,代码都根本写不下去啊。这个都不能算是过度设计,而是魔怔了呀。
nullyouraise
2023-06-10 19:43:24 +08:00
我之前在 C++里一个模板类带 concept 也写了 30 行的约束……
AyaseEri
2023-06-10 19:47:07 +08:00
这。。。不亚于前端写库那群人做的类型体操。
liuguangcuican
2023-06-10 21:08:38 +08:00
这代码牛逼的,你们还想着怎么优化代码,怎么写优雅,老板可能背后想着怎么优化你了,这个老哥直接让老板断了这个念想
GeruzoniAnsasu
2023-06-10 21:18:21 +08:00
拍平了无非就是 class C <constraint1,constraint2,constraint3,...> 而已

但放 java 里真的挺蠢的,c++里玩类型体操是因为类型是可被计算的,java 这么搞怕不是邯郸学步把自己忽悠瘸了
shalk
2023-06-10 21:27:03 +08:00
一般类里面,最多泛两三个类型,这么多泛的类型,完全可以拆开来分别设计。

泛了这么多,全是约束,编译约束可能导致,各种问题,又回来放宽约束
besscroft
2023-06-10 21:51:35 +08:00
Java 泛型之父,6
yuekcc
2023-06-10 22:03:33 +08:00
在 typescript 面前这些都是小 case
janus77
2023-06-10 22:51:05 +08:00
java 是这样的.jpg
libinglong9
2023-06-10 23:03:35 +08:00
@beneo 你的回答很 gpt
fkdtz
2023-06-10 23:47:14 +08:00
可以但没必要,都 DTO 层面了应该很靠近业务侧了, 业务之间定制化比较高,强行捏合有点过了。不过如果业务之间真的很接近到也无妨吧,反正能保证写一次半年不会改就还行。
GuardX
2023-06-11 00:05:22 +08:00
函数里这么多 Common ,真的很 common 吗?
Dragonphy
2023-06-11 00:59:15 +08:00
需要了解下 Clean Code 的基本概念,代码不可读写得再牛逼那也是拉屎
realpg
2023-06-11 02:28:00 +08:00
@vitovan #2
团队环境写这种代码就离被优化不远了

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

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

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

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

© 2021 V2EX