Forwarded from dnaugsuz
虚表是为了这种情况产生的:
class U{void run();}
然后
也就是
对 Java 而言任何非 final 方法都是虚方法,但是 VM 有专门的CHA 继承树优化,不必担心什么抽象度开销的问题
就是动态性(duck typing)和类型安全性兼顾,只是要看你会不会面向对象设计了。
class U{void run();}
class A extends U {void run(){/*impl a*/}}
class B extends U {void run(){/*impl b*/}}然后
U obj = rand()>0.5f? new A() : new B(); obj.run();也就是
((U)obj).run() 「可能」是 A 或 B 的实现,才有 virtual 一词的意义;单纯 override 但 U 只有 A 一个子类的话, U.run 实现有唯一性就没有 vtable 或 fat pointer 的说法;这种多态反而是对直接 if instanceof A/B 的优化。对 Java 而言任何非 final 方法都是虚方法,但是 VM 有专门的CHA 继承树优化,不必担心什么抽象度开销的问题
就是动态性(duck typing)和类型安全性兼顾,只是要看你会不会面向对象设计了。
Telegram
duangsuse::Echo
#cs #PLT Expression Problem(Visitor Pattern, interpreter) 这个问题我也讲过 #zhihu https://zhuanlan.zhihu.com/p/163762783 ,你们可以比较一下。
Forwarded from dnaugsuz
你这就是对函数式有偏见了,首先 JS 目前 declarative 化进程是非常实用的,和 Haskell,Scala 那一档完全出于不同的目的
其次泛型就是泛型,和函数式(大点说定义式编程)有什么关系?自信点吧,别总觉得别人装逼(ー_ー) 只有你去做他们做到了的事,才能理解他们。
对于 C++ stl (stdc++ .hpp) 我还是很欣赏的,尤其是 ptr iterator ,只有懂算法的人才能明白 back(), push_back(), insert() 这些动词组合里的语义优雅性,你没接触过自然觉得 push pop / add remove 才香。
Boost 和 C++ stl 设计范畴根本不一样,他们爱玩元编程被别人吐槽我不洗,但是这也并非无意义的。
Javaer, Pythonista, Pythonic 之类的概念我觉得就是从 web 网红界吹来的歪风,你看他们哪个不是学识浅薄但总爱企业级理解的⊙︿⊙。偶尔还设计出程序流程、数据存储架构安排不当,只有花皮没内涵的东西,比如 npm 。
其次泛型就是泛型,和函数式(大点说定义式编程)有什么关系?自信点吧,别总觉得别人装逼(ー_ー) 只有你去做他们做到了的事,才能理解他们。
对于 C++ stl (stdc++ .hpp) 我还是很欣赏的,尤其是 ptr iterator ,只有懂算法的人才能明白 back(), push_back(), insert() 这些动词组合里的语义优雅性,你没接触过自然觉得 push pop / add remove 才香。
Boost 和 C++ stl 设计范畴根本不一样,他们爱玩元编程被别人吐槽我不洗,但是这也并非无意义的。
Javaer, Pythonista, Pythonic 之类的概念我觉得就是从 web 网红界吹来的歪风,你看他们哪个不是学识浅薄但总爱企业级理解的⊙︿⊙。偶尔还设计出程序流程、数据存储架构安排不当,只有花皮没内涵的东西,比如 npm 。
Forwarded from dnaugsuz
我就是喜欢泛型,你不想写类型参数可以用 Ruby 啊,但你肯定还是逃不掉函数值(局部变量集的程序闭包) 的吧
不然你真的很难设计出无冗余的程序哦,只写 class 和应用层无泛型类的话。
不然你真的很难设计出无冗余的程序哦,只写 class 和应用层无泛型类的话。
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