吐槽kotlin之垃圾设计

本文重点在于吐槽垃圾设计,基本直只说缺点。

一.没有static关键字

static其实不是很面向对象,但是是很有必要和方便的。
kotlin为了实现java的static功能,必须使用伴生类,一般情况下没啥问题,但是反编译之后的class多了一个伴生类,这个类一旦被加载,几乎无法卸载,浪费性能和内存。

这个在别的比方无所谓,但是如下场景 ,是真的有点操蛋了

class UserBatchDTO : Serializable {/*** uidList*/var uidList: List<Long>? = null/*** 用户状态,0正常,1禁用*/var status: Int? = null/*** 用户介绍*/var introduce: String? = null/*** 审核通过者uid*/var approvedUid: Long? = null/*** 修改时间*/var updateTime: Date? = null/*** 角色id*/var roleIds: List<Long>? = nullcompanion object {@JvmStaticval name:String = ""private const val serialVersionUID = 1L}
}

二.无意义的空值校验

在这里插入图片描述
下面的代码是右边代码反编译之后的,参数校验、返回校验,之前听说什么游戏循环几十亿导致性能垃圾,这边请求次数多,无意义的判空多了也是浪费性能
在这里插入图片描述

三. 设计思路冲突

这一点和第一点相互关联,或者说是第一点的补充
默认class需要加上open才能被继承,但是做为oop语言,设计理应默认可以被继承,如果想不被继承可以加final,而不是默认final

有人说组合由于继承,但是这不是你默认不能继承的理由。这一点和oop思路冲突

四.代码不一定简洁

1.比如在上文的autowire,kotlin代码还多一点

2.如果写spring,一般还要在class或者方法加open,比一个public单词多一些,因为spring有一些代理,final会导致cglib代理代理失败。open有编译插件,这种魔法无疑不是好的解决方案

3.如果是record对象,kotlin生成了一些无意义的方法,代码膨胀

4.允许为空的字段一定要写默认为null,我建议一个?解决

5.其他隐藏的代码膨胀(class文件)

6.综上能看出为什么服务端用kotlin的意愿不是很强,代码没省略,编译还膨胀,客户端还是可以用用,dsl不错

五.Checked Exception

kotlin去掉了Checked Exception,但是实际上这些异常并不能被忽略,当然有的一窝蜂throwable也是不好

六.这个不全是kotlin的锅

gradle.kts,这个只能喷gradle一坨答辩

基本上80%以上用不上gradle,据目前经验,小项目,没有多平台(比如客户端、游戏)、多语言(c、c++)等混合编译、条件编译等复杂情况,建议不要用了

七 .结束

打完收工,今天喷点结束

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/881737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES6字符串 全局替换

字符串替换 部分替换replace 全部替换 replaceAll aabbcc.replace(b, _) // aa_bcc如果要替换所有的匹配&#xff0c;不得不使用正则表达式的g修饰符。 aabbcc.replace(/b/g, _) // aa__cc

Github学生包的JetBrains认证过期/idea认证过期如何解决?

官网通过Github更新状态即可JetBrains Account 注意要到邮箱走流程

C++面试速通宝典——26

478. 你了解的网络攻击方式有哪些&#xff1f;SYN攻击的防范方法&#xff1f; 网络攻击方式包括&#xff1a; Dos/DDos攻击&#xff1a;通过大量请求耗尽目标资源。Main-in-the-Middle攻击&#xff1a;攻击者拦截和篡改双方通信。Phishing&#xff1a;通过假冒网站或通信骗取…

SQL Server LocalDB 表数据中文乱码问题

--查看数据库设置 SELECT name, collation_name FROM sys.databases;--出现了The database could not be exclusively locked to perform the operation这个错误&#xff0c; --无法修改字符集为Chinese_PRC_CI_AS&#xff1b;所以需要先设置为单用户模式 ALTER DATABASE MySma…

初试PostgreSQL数据库

文章目录 一、PostgreSQL数据库概述1.1 PostgreSQL的历史1.2 PostgreSQL安装1.3 安装PostgreSQL二、PostgreSQL起步2.1 连接数据库2.1.1 SQL Shell2.1.2 执行SQL语句2.2 pgAdmin 42.2.1 打开pgAdmin 42.2.2 查找数据库2.2.3 打开查询工具2.2.4 执行SQL语句三、实战小结文章目录…

日本AZBIL山武燃烧控制器AUR450C42350D0

顺序定时 (在室温、湿度和额定电压下)火焰电压输出范围火焰电压范围 (在额定电压、室温和湿度下)推荐火焰电压额定电源电压允许电压范围功耗介电强度页序&#xff0c;如果发生火修非循环操作629279484士1秒&#xff0c;8士2秒可根据型号选择)仅限《行员7.52.5秒主要审判73秒火老…

大一计算机课程之线性代数

《大一计算机课程之线性代数》 在大一的计算机课程中&#xff0c;线性代数是一门极为重要的基础学科&#xff0c;它就像一把神奇的钥匙&#xff0c;为计算机科学领域的诸多方面开启了智慧之门。 线性代数主要研究线性方程组、向量空间、线性变换等内容。对于计算机专业的学生…

主动降噪技术:原理、方法与应用的深度解析

目录 一、主动降噪的原理二、主动降噪的技术分类三、主动降噪中的核心算法四、主动降噪的应用领域五、主动降噪技术的挑战与未来发展六、结论 主动降噪&#xff08;Active Noise Cancellation&#xff0c;ANC&#xff09;是当前音频技术中的重要应用&#xff0c;广泛用于耳机、…

HCIP-HarmonyOS Application Developer 习题(九)

(多选) 1、HarmonyOS多窗口交互能力提供了以下哪几种交互方式&#xff1f; A. 全局消息通知 B.平行视界 C.悬浮窗 D.分屏 答案&#xff1a;BCD 分析&#xff1a;系统提供了悬浮窗、分屏、平行视界三种多窗口交互&#xff0c;为用户在大屏幕设备上的多任务并行、便捷的临时任务…

【已解决】黑群晖绕过双重认证(2FA)登录(终极方案)

黑群晖绕过双重认证&#xff08;2FA&#xff09;登录&#xff08;终极方案&#xff09; 黑裙版本7.x&#xff0c;之前设置了双重认证&#xff0c;但是由于更换设备导致卡在2FA登录界面&#xff0c;无法登录&#xff0c;之前也没开SSH&#xff0c;网上找了很多方法&#xff0c;…

LeetCode322:零钱兑换

题目链接&#xff1a;322. 零钱兑换 - 力扣&#xff08;LeetCode&#xff09; 代码如下 class Solution { public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount 1, INT_MAX);dp[0] 0;for(int i 0; i < coins.size(); i){fo…

程序员必读:精通ER图设计,解锁数据库高效构建秘籍

在信息技术的浩瀚星空中&#xff0c;数据库如同星辰般璀璨&#xff0c;而ER图&#xff08;Entity-Relationship Diagram&#xff0c;实体-关系图&#xff09;则是那把引领我们穿越数据迷雾的钥匙。对于每一位程序员而言&#xff0c;掌握ER图设计不仅是数据库设计的基础&#xf…

Flutter 3.24 发布:GPU模块及多视图嵌入功能

Flutter 3.24 发布&#xff1a;GPU模块及多视图嵌入功能 Flutter 3.24 带来了许多新功能和改进&#xff0c;让开发应用程序变得更加容易和有趣。这个版本重点展示了 Flutter GPU 的预览功能&#xff0c;让应用程序可以直接使用高级图形和 3D 场景功能。 此外&#xff0c;网页…

从零开始,如何构建一个完整的Java Web应用(全面指南!)

第一步&#xff1a;设置开发环境 1. 安装必要的软件 2. 创建项目结构 3. 添加Spring Boot依赖 4. 配置数据库连接 第二步&#xff1a;设计数据模型 1. 创建实体类 2. 创建Repository接口 第三步&#xff1a;创建服务层 1. 创建服务接口 2. 实现服务接口 第四步&…

Open WebUI | 自托管的类 ChatGPT 网站

Open WebUI 是一个扩展性强、功能丰富且用户友好的自托管 WebUI&#xff0c;支持 ChatGPT 网页端的大部分功能&#xff0c;支持各类模型服务&#xff0c;包括 Ollama 和 OpenAI 的 API。该项目在 GitHub 上已有 38k 星&#xff0c;非常受欢迎。 功能介绍 本篇介绍该项目的功能…

分布式 ID

背景 在复杂分布式系统中&#xff0c;往往需要对大量的数据和消息进行唯一标识。随着数据日渐增长&#xff0c;对数据分库分表后也需要有一个唯一ID来标识一条数据或消息&#xff0c;数据库的自增 ID 显然不能满足需求&#xff1b;此时一个能够生成全局唯一 ID 的系统是非常必…

Android中的Activity(案例+代码+效果图)

目录 1.Activity的生命周期 核心生命周期回调 1&#xff09;onCreate() 2&#xff09;onStart() 3&#xff09;onResume() 4&#xff09;onPause() 5&#xff09;onStop() 6&#xff09;onRestart() 7&#xff09;onDestroy() 8&#xff09;生命周期图示 10&#xff09;注意事项…

Android实现App内直接预览本地PDF文件

在App内实现直接预览pdf文件&#xff0c;而不是通过调用第三方软件&#xff0c;如WPS office等打开pdf。 主要思路&#xff1a;通过PhotoView将pdf读取为图片流进行展示。 一、首先&#xff0c;获取对本地文件读取的权限 在AndrooidManifest.xml中声明权限&#xff0c;以及页…

神经网络整体架构

文章目录 1.输入层Input2.卷积层Conv3.激活函数层(一)Sigmoid 函数(二)Tanh 函数(三)修正线性单元ReLU(四)Leaky ReLU函数(带泄露的Relu)(五)参数化ReLU 4.池化层POOL5.全连接层FC6.输出层Output 用全连接神经网络处理大尺寸图像具有三个明显的缺点&#xff1a; ①将图像展开为…

gitlab-ci 集成 k3s 部署spring boot 应用

环境 一台ECS gitlab 16.10 一台ECS gitlab-runner docker方式 一台腾讯云服务器 k3s k3s version v1.30.5k3s1 (9b586704) go version go1.22.6 本地: idea 2024 准备开始 gitlab上创建"api"仓库,本地IDEA 创建spring boot web demo项目k8s-gitlab-demo. 确保能…