详情

全站展示位

搞懂 Java 与 Kotlin 泛型

本文讨论的「泛型」只局限于 Java / Kotlin 中。 什么是泛型 泛型本质上是一个确保类型安全的手段,它属于那种没有也罢有则更佳的特性。泛型几乎没有扩展 Java 能力的边界,而是提高了编码效率与可维护性,减少模板代码并降低出错机率。这么说的原因是使用 Object 就可以传递任意数据,没有。。。

推荐

搞懂 Java 与 Kotlin 泛型

本文讨论的「泛型」只局限于 Java / Kotlin 中。 什么是泛型 泛型本质上是一个确保类型安全的手段,它属于那种没有也罢有则更佳的特性。泛型几乎没有扩展 Java 能力的边界,而是提高了编码效率与可维护性,减少模板代码并降低出错机率。这么说的原因是使用 Object 就可以传递任意数据,没有必要使用泛型。 所有写 Java 的人都离不开泛型,比如 List<String> 但主动写一个泛型类的人就不多了,其中一个原因是对泛型的能力缺乏清晰的认识,所以不知道什么时候可以使用这个利器。 泛型适用场景有以下几个: 类/接口内部的数据或操作限制于某种数据类型,但这个类型本身可以有多种选择。List 就是这个一个典型用例。 方法的参数/返回值限制于某种类型,但每次调用的时候这个类型可能不一样。(泛型方法) 对参数或返回值类型施加额外的限制。 比如有这样一个方法 void merge(List l1, List l2),希望限制它两个参数的元素必须是同一个类型的且必须实现序列化接口,就可以借助泛型做到:<T extends Serializable> void merge(List<T> l1, List<T> l2) 这个用例中我们并不关心类型参数被实例化为何物,仅仅是用来施加限制。 泛型的实例化 泛型类 泛型只是一个占位符,在使用的时候(编译期)需要被实例化为具体的类型才有意义。这有点像形参与实参的区别。因为它只是一个占位符,所以定义泛型时候的名字无所谓,就像参数名一样。例如下面两种泛型定义等价: 1 2 3 4 5 6 public interface Shop<T> { T get(); } public interface Shop<balabala> { balabala get(); } 所谓泛型的实例化,就是给它确定具体类型的过程。但这个具体类型也可以是另一个泛型提供的,比如下面这个例子: 1 public class LargeShop<T> implements Shop<T> 左边的 T 是声明的类型参数,右边的 T 是用 LargeShop 的类型去实例化 Shop 泛型。同样类比传参:

Category: 路由器

🙅‍♂️ 若放弃自由来换取保障,自由和保障将一并逝去 ——哈耶克 🌎 Believe in OPENNESS

Jetpack Compose 笔记(4)drivedStateOf

数据的转换 对于 Compose 中的数据,用 mutableStateOf() 包裹来实现监听刷新我们已经轻车熟路。那如果一个数据依赖于另一个或多个数据怎么办?这就用到 derivedStateOf(),它专门用于数据的转换,当上游数据发生变化时会自动刷新下游数据,进一步刷新 UI。有点类似 LiveData 中 Transformations.switchMap 的作用。 Show me the code: 1 2 3 4 5 6 7 8 9 10 setContent { var name by remember { mutableStateOf("chenhe") } val upperName by remember { derivedStateOf { name.uppercase() } } Column { Text(upperName) Button(onClick = { name = "bob" }) { Text(text = "Change Name") } } } upperName 由 name 转换得来,一开始会显示 “CHENHE”,点击按钮后变成 “BOB”。好了,本节到此结束 😋

小米支架自拍杆—不止自拍

之前的线控自拍杆丢了,爱旅游的我缺少这么个神器简直不能忍,于是又找朋友要了个。(请不要过分在意“要”这个动词,另外,我才不告诉你们丢的那个也是要的 (′▽`〃))这货让我写篇评测…WTF?? 写就写吧,说不定哪天成了数码大V可要好好感谢他 (o゚v゚)ノ 噔噔噔噔 这次给我的是小米支架式自拍杆,就是这货↓ 包装 包装一脉继承小米的极简风,甚至连说明书都省去了,直接印刷在外壳上。 内有一个小盒子,里面是蓝牙遥控器。 主体 自拍杆主体是纯粹的支架,并没有任何连接线与按钮。自拍杆头部整体是可以以180°为单位进行旋转,主要是为了便于收纳。因为正面需要安装蓝牙遥控器,手机夹不得不旋转到背面进行折叠。 不同于常规自拍杆,这款手机夹除了可以前后俯仰调节角度之外,也支持以45°为单位进行旋转,因此可以实现手机竖直方向的拍摄。不过夹上手机后因为手机本身的阻挡,一般只能旋转±45°,如需切换横竖屏要先把手机拿下来。(如果你的手机只有半个手掌那么大的话就当我没说 = ̄ω ̄=) 手机夹接触面是橡胶(硅胶?傻傻分不清),质地柔软,摩擦力大,不伤手机也不容易脱落。官方说明写可以适配宽度在56-89mm的手机,网友说小米mix可以正常使用。相对于线控版自拍杆,此款取消了调节螺丝,改为固定阻尼的转轴,阻力刚刚好,用起来比来回拧螺丝方便不少。 因为整合三脚架的设计占用了不少空间,同时为了增加便携性以及手柄的握持感,只好牺牲了长度。完全伸展后加上手柄也只有40cm左右,与普通版70cm的长度有一定差距。其实40cm对于常规自拍差不多足够了,如果还想靠自拍杆举高高来欣赏被人群挡住的表演,可能有点困难。 另:完全伸展后有3段,一开始阻力比较大,要大胆拉开。 支架 支架算是这款最大的特色了。底部轻松掰开后即可快速变成一个三脚架。尾部采用了橡胶(硅胶?)材料,摩擦力大,几乎不用担心打滑现象。(但是这种材料容易沾灰,强迫症看着很难受)中间拉长杆的收纳部分也顺势当做了支架,在超重时可以分担压力吧。 当做支架使用时也是可以拉出伸长杆的。全部拉出后加上全金属荣耀7,在水平的床上依旧可以站住,稳定性还不错。 蓝牙遥控器 本款使用了分离式蓝牙遥控器,可以单独拿下来使用。安装处有凹槽,应该比较结实不会掉下来。遥控器采用 micro-usb 充电接口,接口除了充电,也兼具从自拍杆拿下时的缺口功能,使得拿下也是非常轻松。 遥控器按钮略硬,不注意的话有可能造成拍照抖动(希望你的手机有光学防抖),不过防抖不防手贱嘿嘿 ( ̄_, ̄ ) 总结 这是一个兼具创意与实用的产品,尤其适合男生。我想大部分男生应该不如妹纸那么喜欢自拍,自拍杆更多情况下是作为辅助工具使用。 带有三脚架的自拍杆在平日可以作为手机架,看个电影玩个直播还是很方便。在外面拍个延时摄影、长曝光等对于抖动要求高的东西可以说非常完美了。毕竟谁也不想背个专业器材出去玩。 可分离式的蓝牙遥控器更加拓展了使用场景。合个影不用求人啦,抓拍个什么更是美滋滋。 不满意的是没有采用最新的 type-c 接口,外出时不得不单独考虑数据线的问题。同时使用蓝牙3.0并不支持BLE,续航也需要注意。目前没有找到官方的续航参数。 最后 蟹蟹这位朋友啦 (๑•ᴗ•๑) ❤

心灵鸡汤

励志小故事、马

  马,本来自由自在的在山间撒野,渴了喝点山泉,累了就睡在地上晒太阳,无忧无虑。可是自从有了伯乐,马的命运就改变了,给它的头戴上笼辔,在它的背上置放鞍具,栓着它,马的死亡率已经是十之二三了,然后再逼着它运输东西,强迫它日行千里,在它的脚上钉上铁掌,马的死亡率就过半了。马本来就是毫无规矩毫无用处的动物,让它吸取日月之精化,天地之灵气,无用无为,还得以享尽天年,教化它,让它懂得礼法,反而害了它的生命。

  【人生感悟】人何尝不是如此呢?在规矩的约束下我们是否也丧失了本我,成天遵循别人制定的礼义,逼迫自己去做不愿意做的事情,有限的生命还剩下多少呢?

列表展示

主站展示位

Tags: algorithm

Hi, 这里是晨鹤的个人博客。一个赶上了 90 后末班车的跨时代 ISFP 努力守护的一个一亩三分地。

Android 中的注解处理

基本语法 注解有时候也称为「元编程」,它是对代码本身进行编码,让程序自动生成代码。这种理解有一点狭义,注解不一点要生成代码,也可能只是给其他代码或 IDE 作为参考。例如 @Deprecated 就是很好的例子。 在 java 中,定义注解语法如下: @Retention(RetentionPoli

不可描述的东西

千万不要在使用代理时开启带有 p2p 功能的下载器,例如迅雷,不要进行 p2p/BT 下载。 订阅节点说明 订阅地址已分别私聊发送,敬请收藏。这里仅用作帮助文档。 💡节点不能用时请先尝试更新订阅! 默认订阅带有「♻️最低延时」组,会定时对全部节点进行延时测速,自动选择最优的作为主要代理。但往往最低

LeetCode452/435/135/714 贪心算法

总结 当我们感觉局部最优可以推出全局最优,一时找不到反例时就可以使用贪心算法。所谓「贪心」就是只在眼下找到最好的方法。贪心算法相对比较抽象,不像滑动窗口那么好识别有套路。局部最优有很多种表现形式:例如先处理一部分元素,再处理其他部分。或者先从一个维度处理全部元素,再从另一个维度处理。不要把「局部」狭

大学活动的原罪

又是一年运动会,想起大一时的自己,想起现在大一的孩子,感到面对框架的深深无力。 诡异的现状 相信无论你是双一流还是专科,一定遇到过「被」参与活动,「被」当观众之类的事情。若严词拒绝,轻则辅导员谈话被指没有集体荣誉感,重则取消评优资格甚至丢掉学分。一般来说,一个真正成功的活动应该是学生踊跃报名,而如今

考研高数公式😑

每天起床第一句,每天起床第一句 泰勒公式记一记 -。- 泰勒公式 $e^x = 1+x+\frac{x^2}{2!}+...+\frac{x^n}{n!}$ $sinx = x-\frac{x^3}{3!}+...+(-1)^n\frac{x^{2n+1}}{(2n+1)!}$ $cosx = 1-

Git HTTP+SSH 代理配置

本来是没有什么技术含量的东西。奇怪的是网上答案千篇一律而且大部分都是错的,不知道要坑坏多少人:smiling_imp:。 代理 git config --global git co

Lean OpenWrt 编译使用小记

Lean OpenWrt 是 Lean 大佬修改的 OpenWrt 开源版本,和 KoolLede 是国内两个比较有名的分支。Lean OpenWrt 不提供预编译文件,所以想使用的话需要自己编译一遍。 编译需要使用 Ubuntu 系统,不要使用 WSL 会出问题。 编译没什么好说的,README

pmset 电源管理让 M1 Macbook 乖乖小憩

自从 M1 芯片的 macbook 买到手,搁着不用总是一周就没电了。昨晚充满观察了一下,一夜合盖休眠竟然消耗了 10% 的电。 TL;DR: 执行 sudo pmset -b powernap 0 关掉小憩,一晚上合盖 1% 都没掉。 消失的小憩 在 MacBook 的电池设置(台式机叫「节能」)

Tags: spring

Hi, 这里是晨鹤的个人博客。一个赶上了 90 后末班车的跨时代 ISFP 努力守护的一个一亩三分地。

归档

Hi, 这里是晨鹤的个人博客。一个赶上了 90 后末班车的跨时代 ISFP 努力守护的一个一亩三分地。

LeetCode N数之和

1-两数之和 梦开始的地方 (LeetCode 第一题) 传送门 Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to tar

Tags: leetcode

Hi, 这里是晨鹤的个人博客。一个赶上了 90 后末班车的跨时代 ISFP 努力守护的一个一亩三分地。

LeetCode239 窗口最大值

题目 传送门 You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right.

用cocos2d-js制作WearOS表盘

这只是一次实验 众所周知,cocos2d 属于游戏引擎,本身就不适合运行在手表,而直接把他当做表盘当然就更不合适了。这里只是一个突发奇想,借助 cocos 强大的渲染与跨平台特性,看看能否做出一款表盘。 要做到这一步需要解决两个问题: 将 cocos 编译到 Android. 将容器由 Activi

Tags: mac

Hi, 这里是晨鹤的个人博客。一个赶上了 90 后末班车的跨时代 ISFP 努力守护的一个一亩三分地。

Koin in Android: 更简单的依赖注入

Dagger 之殇 如果还不清楚什么是依赖注入,那么请参考之前写的 Dagger2 in Android(一)通俗基础开头部分。如果你不了解 Dagger 倒也无妨,本文会进行一定的对比,但仅针对接触过 Dagger 的同学,否则大可以忽略。 Dagger2 作为著名优秀的依赖注入框架广为流传,何况

LeetCode 二分查找

基础 - 704 二分查找 传送门 Given an array of integers nums which is sorted in ascending order, and an integer target, write a function to search target in nums

Z-Library: 加入书籍的乌托邦

简介 Z-Library 旨在让每一个人平等地获得书籍。当然,无论多么高端的口号都掩盖不了法律角度上盗版和侵权的事实。不过法律是矛盾调和的产物,它只能解决很小的一部分问题。从某种程度上,Z-Library 满足了我对互联网乌托邦的幻想。因此决定写下这个文章,帮助更多人轻松使用它。 对普通人来讲,只需

博客寄语:

    相信开放的力量 | Believe in OPENNESS

实时播报:

博客号-学习成长

相信每一分耕耘都有每一分收获,致力帮助博客主所创作的博客能更快的被收录! 如果有其它需求,可联系下方邮箱。