小编eka*_*ets的帖子

如何使用默认(包)可见范围覆盖方法?

我的问题是我无法理解方法解析在以下情况下如何工作:假设,我们有两个包,AB.有两个类,A放在内A,BB.

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具有公共方法 …

java inheritance

14
推荐指数
2
解决办法
5270
查看次数

Kotlin类型安全的类型别名

我在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)

如果能以某种方式防止类型别名之间的隐式转换,从而避免此类问题,那将是很好的。

当然,存在一个问题,基本类型的操作将无法用于类型别名,但是可以使用扩展功能(或强制转换)解决。

我不想使用仅包含一个字段的数据类,因为这似乎有些过大,尤其是对于原始类型(或者我错了,它们会被优化吗?)

那么问题来了:我可以以某种方式为类型别名强制执行类型安全吗?

type-alias kotlin

7
推荐指数
1
解决办法
1309
查看次数

更新字典值并获取上一个值

我从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)

有没有更简单的方法来更新价值并获得前一个?

c# dictionary

3
推荐指数
1
解决办法
2044
查看次数

标签 统计

c# ×1

dictionary ×1

inheritance ×1

java ×1

kotlin ×1

type-alias ×1