RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:9:30-18:00
你可能遇到了下面的问题
关闭右侧工具栏
你见过哪些让你瞠目结舌的 Java 代码技巧?
  • 作者:小万
  • 发表时间:2021-03-25 22:29
  • 来源:未知

  这个代码居然编译过了(提醒一下读者:不是所有注解都可以这么用的,如果你在使用自己写的注解尝试这个例子,请给你使用的注解加上。)。 我很是震精,于是我开始试图了解它背后的含义。这个时候最方便的测试方法当然就是看

  别急,在不知道这个东西的语义的时候先不要急着批判 Kotlin。我们编译一下这个代码里的两个函数,看看字节码吧:

  然后使用这个命令看看字节码(javap的-v参数表示输出额外信息,这里不需要-c(显示方法体)和-p(显示private的东西)):

  看到javap输出了以下结果(已经省略了 80% 对本文无意义的内容了):

  然后在两个测试函数中,可以看到#16注解在不同的地方生效了。 首先是String @Nullable [] args的第一个函数:

  呃。。。好吧,首先很明显第二个@Nullable同时生效于类型和参数本身了,而第一个只在类型上生效了。 不过我还是不知道他们各自在类型上生效时的字节码的意思(看不懂字节码真是对不起呢),于是就使用控制变量法,再写两个函数对比一下(之所以使用两个不同的List实现,是因为List和数组不一样,擦除了就一样了所以 JVM 签名就冲突叻):

  再看看对于泛型类型,Kotlin 的处理方法吧。首先就是刚才那个 Java 代码,Kotlin 表示:

  org.aspectj.weaver.patterns.HasThisTypePatternTriedToSneakInSomeGenericOrParameterizedTypePatternMatchingStuffAnywhereVisitor

  但是我觉得java要写出php或者python的有些语法糖是不可能的,java的重点也不在这里。

  大多数情况下,好的代码应该是易读好维护的,写代码的瓶颈根本不在多写几个字符,多敲几行代码~

  某公司有一个安卓开发工程师郑某,跟我联调一个接口,这个接口要MD5签名,反正死活就对不了。然后他就来找我,说肯定是你的接口有问题。我进行了充分检查并试着调用了几次这个接口,都没有任何问题。然后就下班了。

  第二天上班,我在日志里记下他的请求,发现MD5签名里缺个0,我就让他们改了。