Liskov替代原则: B是A的子类型,如果任何人可以用A做一个人可以用B做。 那么为什么Null是Scala中所有类的子类型,即使按照上面的定义它也不是任何类的子类型?无法将Null定义为实现所有可能的方法,每个方法都返回null? Null在Scala中的定义方式是什么原因?
答案 0 :(得分:8)
NVM在JVM上几乎是不可避免的。引用可以为null。斯卡拉无法阻止它。
所有Scala都将Java的null包含在统一类型系统中。它存在于Java互操作系统中,仅此而已。 Java中的Null是错的,在Scala中也是错误的。
是的,空引用是最终的LSP违规。不,没有办法解决这个问题。评估null为ImageView
而不是抛出final EditText txtPrice = new EditText(getContext());
txtPrice.setKeyListener(DigitsKeyListener.getInstance(false, false));
txtPrice.setFilters(new InputFilter[] { new InputFilter.LengthFilter(3) });
的方法调用不会更正或更不正确,只是同样荒谬。
这里真的没什么好看的。在null
中包裹任何可以为空的东西,忘记这个不正确的黑暗坑,继续前进。
答案 1 :(得分:1)
无法将Null定义为实现所有可能的方法,每个方法都返回null?
没有。返回原始类型的方法不能返回null; 2. Scala null
的唯一原因是因为JVM拥有它;并且JVM null
不会以这种方式运行。这需要在每个方法调用之前基本上添加if
,除非编译器证明接收器不是空的,它通常可以'吨。