在 V2 等平台常看到“写代码一股 Java 味”的调侃,甚至带有歧视意味,说实话,一直很不理解这种调侃?

有种三天斋戒, 沐浴焚香, 登泰山之巅, 祭祀天地, 就为了把一枚硬币翻个面的感觉.

喜欢过度设计

作为一个老 jvaver ,我倒是挺能理解的

针对的不是语言么,为啥会到人这一层。

我的.net 项目被 java 接手后,他来问我
a?.b?.?c 是什么意思,我只好向他解释
if(a!=null)
if(b!=null)
if(c!=null)
return c;
else return null;
esle return null;
else return null;

大概是过度面向对象吧

过度封装过度设计

呃,应该是 a.b != null 、a.b.c != null 和 return a.b.c 吧

我的直观感受就是一个函数能解决的事,非要弄个对象出来,甚至再继承一下

是的,我想说的就是这个,我已经两年没写 c#了(逃

来公司写了几天 python 了,确实比 java 爽,小服务,脚本语言足够了

我记得搞 spring 的时候,非得搞很多层.....

一定要依赖倒置

#5 这个例子跟 java 味没什么关系吧,非要举例,应该是明明 C#有 Properties 了,还非要自己写 get/set

这个应该是别人不懂 c#的语法吧?

在 c#的角度来看 java 味是没什么语法糖,啰嗦,什么都是类。但其他语言不是只有 class ,java 尝试其他语言的时候会把只有 class 的这种设计套到其他语言上,写出 java 味的代码

nullable type 的语法糖

很多人喷不到点上,比如说啥文件夹嵌套之类的,这根本都不是事。
但是过度封装过度抽象确实是广泛存在的问题

调侃归调侃,歧视的人指定有问题的,哪有完美的语言呢

在 c#的角度来看 java 味是没什么语法糖,啰嗦,什么都是类。但其他语言不是只有 class ,java 尝试其他语言的时候会把只有 class 的这种设计套到其他语言上,写出 java 味的代码

主要是吐槽过度设计吧

有 java 味吗?
不过我可没写过 java 。

其实就是歧视,但这也不是无中生有,我有个同事就喜欢随便写个 service 都要整个接口实现下。我说这样冗余太多,看代码费劲,需要抽象时再用接口重构也不费事,他说我大家都这么写,说我是“众人皆醉我独醒”。那我也只能顺从

本质上就是 doNet 、Python 等之流,对他们熟悉的语言,在国内不能占据生态位,从而迁怒于人而已。
至于为什么没能占据 Java 的生态位呢,当然是 Javaer 的问题啦

先别管有没有必要,先把模式设计板出来,也别管代码是不是简洁高效易理解。最后要么重新推翻,要么变成屎山~

确实,很多情况其实都不要接口

弱弱问一句,大家对设计模式有什么看法,平时也会用,而且在某些场景下觉得还是挺好用的。

我觉得吧 你可以从 Initializer Processor Manager Holder Component Factory Handler Interceptor Filter Listener Adapter Resolver Builder Validator Strategy Context 。。。。这些地方吐槽 java 还有意义
要是从语法糖角度你可以吐槽任何一门语言 包括 c c++ pascal 这些老东西

#27 是好东西,但其实也是为了弥补 java 语法抽象能力不足的问题。但写业务代码,那么多设计模式,常用、实用的也就策略模式、责任连模式,不然看到那种一个方法几百行的 if else 真的头大。有些人滥用设计模式才是大问题,十几行的核心代码能整出好几个类

人红是否多,windows 也经常被吐槽, 奈何别人占有率高得可怕。所以才有那么多人嘲笑印度阿三。

难道不是后者更易读清晰?

class Adder { int add(int a, int b) { return a + b; } }
这样看起来只有 javaer 觉得更清晰吧

java 味=xxx/com/aaa/bbb/src/main/

创建这样一大串的目录,很抽象

#29 设计模式本质就是狗皮膏药,用得越多说明语言/架构问题越大

一群写脚本语言的把

我说 a?.b?.?c 不易读,你给我发 Adder ,这不就是无脑黑吗

设计模式是,特定场景最优解之一,并且提供统一了命名。
看不懂设计模式,说明代码理解差。

我哪知道你在回复哪一楼 ,我以为你回复的是#16 楼

a?.b?.c? options chain 不是 c#独有的功能,用过的人一眼懂,而且表达式比那几行 if 不简洁很多,养成习惯更是告别了空指针错误

是阿里味 国内互联网公司被阿里这家毒瘤老中公司害惨了

面向对象的语言都差不多,java/c# 封装继承多态,你单人项目不做任何设计一把梭也是可以的
多人开发的项目中没有那些”过度设计“中间堆屎可能都堆不动

总觉得 java 程序员有种说不出来的根深蒂固的思想,而且总以自己语言的思想去思考或者要求别人,另外就是过度设计、框架化太严重,大概就这些吧

Erich Gamma 在其博士论文中进一步探索设计模式,随后与 Richard Helm 、Ralph Johnson 、John Vlissides (合称“四人帮”,GoF )合作,系统整理了 23 种面向对象设计模式。1994 年,GoF 的经典著作《设计模式:可复用面向对象软件的基础》出版,标志着设计模式在软件工程中的体系化与标准化

Java 语言正式发布于 1995 年 5 月 23 日

#37 对, js 也有, 可选运算符.

js, ,ts, kotlin ,ios swfit 都支持

是一种无知但又无耻的愚蠢

类型都没有,无味

只会被引用一次函数也要搞几个设计模式封装一下,函数名还特别长,看 java 转 go 同事写的代码,深深的被震撼到。

#20
恨不得一个 hello world 都给你整出个 handler provider 就是 java 人了

你是一个文件一个类吗?

可能因为即使不懂 Java 对于所谓的 Java 味代码都能一眼看出是干什么的从而指点一下吧,不像 rust 之类的学个三五年才敢写基本的双向链表.

没做过复杂项目呗