Forwarded from dnaugsuz
可以把 err 重定向到 out , bash 里可以
但是 lang.Console 好像是能设置啥 handler 的,javap 可看一下
顺便提一句这个本质上是在 native 层启动进程少调 Java API ,要 exec() 是肯定的
echo wtf 2>&1 实现, java.lang.Process ? 就不知道了但是 lang.Console 好像是能设置啥 handler 的,javap 可看一下
顺便提一句这个本质上是在 native 层启动进程少调 Java API ,要 exec() 是肯定的
Forwarded from Haruue | 春上ひつき
看看隔壁 Golang
interface{} 满天飞的代码你就知道没有泛型会有多痛苦了。Forwarded from Haruue | 春上ひつき
另外 C++ 的模板(泛型)实际上是像宏那样将模板参数直接代入, 在代入时是不检查类型参数是否合法的(就像鸭子类型), 是在展开之后才检查代码能不能编译通过, 这使得与模板相关的错误可以变得非常难以阅读 ( C++20 加入了 concept , 支持对模板参数施加约束, 缓解了这个问题)
而 Java 的泛型是在编译时辅助类型检查, 在运行时擦除+类型转换。
两者差异还是蛮大的。
而 Java 的泛型是在编译时辅助类型检查, 在运行时擦除+类型转换。
两者差异还是蛮大的。
Forwarded from Haruue | 春上ひつき
也只有 C++ 能做模板元编程, Java 没这种 feature 。。。
使用泛型的 Java 代码还是非常易懂并且容易维护的。。。
使用泛型的 Java 代码还是非常易懂并且容易维护的。。。
みつき そはら | 椒鹽九肚魚🐟 | 牛年大吉 | 🇨🌿 ☕️ 🤖 🐍:
void * 啥都做不了
duangsuse:
但是它的确是一个 size_t 长的数字
みつき そはら | 椒鹽九肚魚🐟 | 牛年大吉 | 🇨🌿 ☕️ 🤖 🐍:
void *ptr = ...
ptr+1 // error
因為指計類型只是 size 嘛
+1 相當於移動了 size 的長度
void * 沒有類型資訊
這是指計本身的大小 解引用/做加減就看背後的指向的位址啊
void * 啥都做不了
duangsuse:
但是它的确是一个 size_t 长的数字
みつき そはら | 椒鹽九肚魚🐟 | 牛年大吉 | 🇨🌿 ☕️ 🤖 🐍:
void *ptr = ...
ptr+1 // error
因為指計類型只是 size 嘛
+1 相當於移動了 size 的長度
void * 沒有類型資訊
這是指計本身的大小 解引用/做加減就看背後的指向的位址啊
duangsues.is_a? SaltedFish
みつき そはら | 椒鹽九肚魚🐟 | 牛年大吉 | 🇨🌿 ☕️ 🤖 🐍: void * 啥都做不了 duangsuse: 但是它的确是一个 size_t 长的数字 みつき そはら | 椒鹽九肚魚🐟 | 牛年大吉 | 🇨🌿 ☕️ 🤖 🐍: void *ptr = ... ptr+1 // error 因為指計類型只是 size 嘛 +1 相當於移動了 size 的長度 void * 沒有類型資訊 這是指計本身的大小 解引用/做加減就看背後的指向的位址啊
Telegram
みつき そはら | 椒鹽九肚魚🐟 | 牛年大吉 | 🇨🌿 ☕️ 🤖 🐍 in Java 编程语言
這是指計本身的大小 解引用/做加減就看背後的指向的位址啊
Forwarded from Luke
下面这段代码有问题么?有什么问题?为何会有这个问题?
List<? extends Object> list = new ArrayList<>();
list.add(123);
Object obj = list.get(0);
List<? extends Object> list = new ArrayList<>();
list.add(123);
Object obj = list.get(0);
Forwarded from dnaugsuz
List<?extends Object> 感觉比较没意思吧.. 其实就是 List get,set:Object 的裸类型
轻松一点:
严苛一点: ?extends 相当于 Kotlin 的 out ,是有子类型兼容性的(即 P<T1> extends P<T> )。如果
这里正确的做法是用 boxed 的
这种情况(破坏 type constraint) Javac 抖机灵不让你 add() null 外的值,从某种意义上它也是有 in/out 检查的,只是语法太烂。
之所以 List<T> T=Any 或 Int 仍能用是因为 ArrayList<T1>() 的 T1是自动推导的,不存在子类型兼容问题。
嘛,我觉得这个作为面试题有点过分了。作为普通程序员,用 Kotlin 就能解决所有问题(逃
轻松一点:
list.add((Object)123); int x=(Object)list.get(0); ,这样不方便。严苛一点: ?extends 相当于 Kotlin 的 out ,是有子类型兼容性的(即 P<T1> extends P<T> )。如果
List<?extends Object> xs = new ArrayList<Integer>(); xs.add((Float)0.1f); 就完蛋了,假设 xs 是作为函参定义的话。这里正确的做法是用 boxed 的
List<Integer> ,也不能是 List<?extends Number> ,除非你保证不会 .add 或 .set。这种情况(破坏 type constraint) Javac 抖机灵不让你 add() null 外的值,从某种意义上它也是有 in/out 检查的,只是语法太烂。
之所以 List<T> T=Any 或 Int 仍能用是因为 ArrayList<T1>() 的 T1是自动推导的,不存在子类型兼容问题。
嘛,我觉得这个作为面试题有点过分了。作为普通程序员,用 Kotlin 就能解决所有问题(逃
Telegram
duangsuse::Echo
iseki对Kotlin的类型系统型变性和解释器里常用的Visitor Pattern敢不敢想兴趣?我写的文章。 🤔
Forwarded from Luke
#全局配置
configurations.all {
resolutionStrategy.force 'com.google.guava:guava:18.0'
}
https://www.jianshu.com/p/8faf85fcee5f
这样可以暴力指定某个版本
configurations.all {
resolutionStrategy.force 'com.google.guava:guava:18.0'
}
https://www.jianshu.com/p/8faf85fcee5f
这样可以暴力指定某个版本
简书
Gradle编译依赖冲突问题(AGPBI)
问题 在出现依赖的库版本不一致的情况时,gradle会默认使用新版本覆盖旧版本,通常不需要手动去解决。那么出现冲突一般为两个依赖属于不同类型的配置,比如: 解决方法 打印依赖...
#android https://t.iss.one/AndroidDevCn/184247
contentUrl Hinnka Zhou, [23.02.21 15:37]
选取图片拿到的content uri不能保存起来下次继续用吗?
Rikka, [23.02.21 15:39]
不知道 有没有取得 永久授权
Hinnka Zhou, [23.02.21 15:41]
通过ACTION_GET_CONTENT拿的图片
Rikka, [23.02.21 15:42]
takePersistableUriPermission
Hinnka Zhou, [23.02.21 15:47]
真坑, 通过ACTION_GET_CONTENT拿到的uri不支持takePersistableUriPermission
Hinnka Zhou, [23.02.21 15:47]
只有ACTION_OPEN_DOCUMENT才行
Rikka, [23.02.21 15:48]
本来就不是可以存起来的
Hinnka Zhou, [23.02.21 15:50]
所以说, 我要用这图片必须在自己App内存一份?
Yuze Wu | 女子高中生 | 喵!, [23.02.21 15:50]
[In reply to Rikka]
那saf获取的文件夹访问权限可以?
Rikka, [23.02.21 15:50]
双方进程都没死 就应该有权限
Hinnka Zhou, [23.02.21 15:51]
选图片设壁纸, 进程杀掉图片没了😅
Rikka, [23.02.21 15:52]
这种场景拿到就存一份是很正常的 吧
Hinnka Zhou, [23.02.21 15:53]
也行吧, 就是我这场景支持多选, 可能会选一大堆
contentUrl Hinnka Zhou, [23.02.21 15:37]
选取图片拿到的content uri不能保存起来下次继续用吗?
Rikka, [23.02.21 15:39]
不知道 有没有取得 永久授权
Hinnka Zhou, [23.02.21 15:41]
通过ACTION_GET_CONTENT拿的图片
Rikka, [23.02.21 15:42]
takePersistableUriPermission
Hinnka Zhou, [23.02.21 15:47]
真坑, 通过ACTION_GET_CONTENT拿到的uri不支持takePersistableUriPermission
Hinnka Zhou, [23.02.21 15:47]
只有ACTION_OPEN_DOCUMENT才行
Rikka, [23.02.21 15:48]
本来就不是可以存起来的
Hinnka Zhou, [23.02.21 15:50]
所以说, 我要用这图片必须在自己App内存一份?
Yuze Wu | 女子高中生 | 喵!, [23.02.21 15:50]
[In reply to Rikka]
那saf获取的文件夹访问权限可以?
Rikka, [23.02.21 15:50]
双方进程都没死 就应该有权限
Hinnka Zhou, [23.02.21 15:51]
选图片设壁纸, 进程杀掉图片没了😅
Rikka, [23.02.21 15:52]
这种场景拿到就存一份是很正常的 吧
Hinnka Zhou, [23.02.21 15:53]
也行吧, 就是我这场景支持多选, 可能会选一大堆
Telegram
Hinnka Zhou in [CN] Android Dev
真坑, 通过ACTION_GET_CONTENT拿到的uri不支持takePersistableUriPermission
Forwarded from dnaugsuz
感觉这样写好看些:
val img = getBitmap(vmod.playlistState[index]) ?: return
if (oldImg==null) { drawBitmap(surface, img); return }
launch(mainScope) {
ValueAnimator.ofFloat(0f, 1f).with(1000L, DecelerateInterpolator()).start { drawBitmap(surface, oldImg, img, it) }
}
fun Animator.with(duration: Long, interp: Interpolator) = apply { this.duration = duration; interpolator = interp }
fun <A: Animator> A.start(op: (Double) -> Unit) { addUpdateListener { op(it.animatedFraction) }; start() }Forwarded from dnaugsuz
草🤔
的确 basic block 加 br 是好选择
就记得 while 和 if else 的翻译方式
builder 除了 sizeof 和指令选择 到底掩盖了什么细节呢
BB 是中端优化上的概念,对跳转回填什么的大概也没有帮助吧,和 std::list 差不多
的确 basic block 加 br 是好选择
就记得 while 和 if else 的翻译方式
builder 除了 sizeof 和指令选择 到底掩盖了什么细节呢
BB 是中端优化上的概念,对跳转回填什么的大概也没有帮助吧,和 std::list 差不多
Forwarded from dnaugsuz
记得 mips 和 arm 在子程序基础上都差不多,是有个 lr 和 sp... 看了一下是 jal/jr $ax 这样
https://github.com/Ray-Eldath/whatever/blob/master/mips/fib.a#L40
寄存器分配不会写(这个还包括溢出到栈,就是局部带限制和优先级的指令操作数存储空间的分配吧) 完全用栈的话就方便多了,等于 [a,b,c] = sp 一样的「数组解构」
https://github.com/Ray-Eldath/whatever/blob/master/mips/fib.a#L40
寄存器分配不会写(这个还包括溢出到栈,就是局部带限制和优先级的指令操作数存储空间的分配吧) 完全用栈的话就方便多了,等于 [a,b,c] = sp 一样的「数组解构」
GitHub
Ray-Eldath/whatever
Scala, Cats, Kotlin, JMH, x86, MIPS, Modern C++, and more... - Ray-Eldath/whatever