duangsuse::Echo
714 subscribers
4.24K photos
127 videos
583 files
6.46K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Forwarded from 小邱
它的提示被引用没有了
Forwarded from dnaugsuz
那你就别改了,要不然你就 refactor 成 getListItemNumberView 的形式
估计 MainActivity 里的 View field 真是它自己的,
ViewHolder 里的 View,按字面意义上本来就是给别人使用的,自己只是负责持有,所以要 public 给暴露出去(虽然一般我们都会用 getter/setter 而不是裸 field)
Forwarded from Rubicon
无标识符默认protected(就是你说的package-private),每个文件只能有一个public class(感觉好像Java是用文件名识别class的),文件名与public class的名称相同,比如example.net.Request 必须在example/net/Request.java
Forwarded from 平行线
字段访问权限无论何时都应该最小化,这是好习惯,就像第一个做的那样
第二个是因为它是作为内部类存在,那个字段要被外部类访问(她只是一个viewHolder),如果作为private外部类在语法上虽然也可以访问,但在编译之后它会生成中间代理get方法来访问private字段,方法调用会消耗性能(另:它作为static class会更好)
Forwarded from dnaugsuz
Java 语言的抽象层次比较低,还有 field,Kotlin 里都是自动生成的。
private String name;
String getName() { return name; }
void setName(String name) { this.name = name; }

Java 里一个 class 可以有
constructor, field, method, inner-class
static field, static method

Kotlin 里一个 class 可以有
constructor, val/var, fun, inner class

而且 Kotlin 里需要在架构器被赋值的量,可以直接写架构器里;并且创建某个 class 的新实例也不需要 new 关键字,所以说 Kotlin 抽象程度更好
Forwarded from 平行线
编译之后它将成为 OutterClassName$NumberViewHolder,与外部类关系是同包,外部类在虚拟机层面将无法访问内部类的private字段、方法,Java对于外部类调用内部类的方法、字段的时候会生成包级别(默认)访问权限的Delagate方法来访问
Forwarded from dnaugsuz
可他说的是第二个直接错误了,找不到引用
Forwarded from dnaugsuz
没理由为了这种极端情况刻意优化,而且这代价…… 虽然只是 private 到 public,依然不值得
Forwarded from 平行线
哪个错误了?
findViewById?
Forwarded from 小邱
它的提示被引用没有了
Forwarded from dnaugsuz
显然还有其他代码引用了 ThatViewHolder.listItemView,而那些代码要求 public
Forwarded from dnaugsuz
丑 Java 多作怪,要是 Kotlin 就既可以保证抽象性,又能做到简洁
Forwarded from 平行线
🤔那你应该是在这个Java文件之外使用了这个字段,否则private化并不会产生报错
Forwarded from 小邱
没有报错 之前ide的加粗提示没有了
Forwarded from dnaugsuz
所以你之前所说的是…… 不是错误 🌚
Forwarded from dnaugsuz
只是“加粗没有了”
Forwarded from dnaugsuz
草,对 IDEA 那不是自然而然的嘛
方便你区分
Forwarded from dnaugsuz
那当然,因为你的 class 里面没引用者,它是 private field,又不是 protected 那 class SomeClass extends YourClass 还能访问到
我还以为是就 public/private/protected 它会区分粗体斜体什么的呢……忘记了,有段时间没用 IDEA
下去散步的时候想了一下 ParserKt 的 LayoutPattern 处理可选的 layout 的问题,感觉有点复杂

所谓可选的 layout,就是:

if p: op() #无
if p: #有
op1()
op2()

和带不带花括号的区分方式处理上差别不太大,都是判 1 字符。

ParserKt 里限制非常大,因为是严格的 peek(1),没法预判
不过对于 if,可以定义这种 Pattern<Char, AST>

LayoutPattern 是基于 item / tail / layout 定义的,有没有 layout 也是取决于 tail 是否解析成功
但由于 ParserKt 全局严重依赖 Type nullability (也就是 Optional<T>)所以不可能在 tail 里做到区分 layout/非layout 的语法

我想到了一个方法,就是把 \n 字符从 layout 的 prefix item('\n') 里拉回 tail 里,跳过 whitespace 和 ':' 后看是否换行,然后再基于整个 LayoutPattern 的结果,Piped
+ 如果结果是 Expr,则代表非 layout 语法,继续 read 一个 expression 并且组织 IfExpr
+ 如果结果是 IfBlock,则代表 layout 语法,直接返回结果
Forwarded from dnaugsuz
Arrow 实在是太可怜了,开始我看几个 parser combinator 库依赖它,还以为它是个 big guy 呢 🤪