我的问题是我无法理解方法解析在以下情况下如何工作:假设,我们有两个包,A和B.有两个类,A放在内A,B内B.
A:
package com.eka.IO.a;
import com.eka.IO.b.B;
public class A {
void foo() {
System.out.println("parent");
}
public static void main(String... args) {
B obj = new B();
obj.foo();
}
}
Run Code Online (Sandbox Code Playgroud)
B:
package com.eka.IO.b;
import com.eka.IO.a.A;
public class B extends A {
public void foo() {
System.out.println("child");
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印"child",这是完全正常的.但是如果我按以下方式更改方法main:
public static void main(String... args) {
A obj = new B();
obj.foo();
}
Run Code Online (Sandbox Code Playgroud)
代码打印"父",我不明白为什么.(obj具有运行时类型B,B具有公共方法 …
我在Kotlin代码中经常使用类型别名,但是我想知道是否可以对它们实施类型安全性。
typealias Latitude = Double
typealias Longitude = Double
fun someFun(lat: Latitude, lon: Longitude) {...}
val lat: Latitude = 12.34
val lon: Longitude = 56.78
someFun(lon, lat) // parameters are in a wrong order, but the code compiles fine
Run Code Online (Sandbox Code Playgroud)
如果能以某种方式防止类型别名之间的隐式转换,从而避免此类问题,那将是很好的。
当然,存在一个问题,基本类型的操作将无法用于类型别名,但是可以使用扩展功能(或强制转换)解决。
我不想使用仅包含一个字段的数据类,因为这似乎有些过大,尤其是对于原始类型(或者我错了,它们会被优化吗?)
那么问题来了:我可以以某种方式为类型别名强制执行类型安全吗?
我从Java背景来到C#世界.
我需要更新map/dictionary中的值并获取之前的值(如果没有则返回null).我会在Java中执行以下操作:
String oldValue = myMap.put(key, newValue);
someFunction(oldValue, newValue);
Run Code Online (Sandbox Code Playgroud)
在C#中我使用了Dictionary,但是我没有找到任何方法来获取更新前的值.到目前为止,我需要执行2次查找才能完成此任务,我认为在性能和代码行方面并不是最优的
string oldValue = null;
myDictionary.TryGetValue(key, oldValue);
myDictionary[key] = newValue;
SomeFunction(oldValue, newValue);
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来更新价值并获得前一个?