Go 语言和 Java 接口的优缺点分别是什么呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Elaina
V2EX    编程

Go 语言和 Java 接口的优缺点分别是什么呢?

  •  1
     
  •   Elaina 2022-06-19 08:57:34 +08:00 2481 次点击
    这是一个创建于 1276 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Go 等语言采用的是隐式声明,而 Java 等语言采用的是显示声明,这两种不同的声明在大型业务开发中有哪些优缺点呢?实际上哪种在业务开发中才是最好用的呢?

    4 条回复    2022-06-20 13:58:50 +08:00
    sadfQED2
        1
    sadfQED2  
       2022-06-19 09:49:09 +08:00 via Android   4
    个人喜欢 java 的风格,go 语言碰瓷似的,永远不知道你实现了哪些接口
    ToBeHacker
        2
    ToBeHacker  
       2022-06-19 10:21:31 +08:00
    没有哪种最好,够用就行了。Java 算是传统的 oo 语言,核心优势在于 IO 与 goroutine
    lhx2008
        3
    lhx2008  
       2022-06-19 10:27:12 +08:00 via Android   1
    有了 ide 的话,go 的更好,接口可以更小而且可以组合
    aguesuka
        4
    aguesuka  
       2022-06-20 13:58:50 +08:00
    Nominal type vs Structural type.

    举个例子 Java 里要声明函数参数必须先定义个接口, 或者使用 jdk 里预设的接口, 甚至 UnaryOperator x = Function::identity 编译不通过, 所以 UnaryOperator 里又把这个方法重新写了一遍. 因为 java 中除了 null 外每个元素都唯一地有自己的 class, 元素的 class 和类型的 class 有没有显式或隐式的继承关系是类型检查的唯一依据(另外要考虑协变和逆变).

    这样的优点可以以非常低的成本实现类型检查和类型推导. 而且能携带"天然支持类型检查的"元信息, 也就是我们拿到一个对象, 就能获得它的 class. 另外能用非常低的成本实现模式匹配. 低成本的意思是我们只需要检查类型的签名信息, 而不需要关注它的方法, 包括协变和逆变都一样, 这个很有用, 因为大脑在写代码的同时也在做类型检查.

    但是 2022 年我们很多时候并不关注元信息的优点, 就像 Java 开发并不关注 C# 开发嘲笑 Java 的"假泛型"一样. 而未来 Structural type 为主的语言可能会将 Nominal type 作为一个可选项加入到语言特性中. https://github.com/Microsoft/TypeScript/issues/202

    Go 的话不是很了解, 不做太多评价.
    和稀泥的够用党真的够了.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5167 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 42ms UTC 07:36 PVG 15:36 LAX 23:36 JFK 02:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86