gpt4 book ai didi

java - 为什么 Java 允许接口(interface)具有静态只读字段而 .NET 接口(interface)不能?

转载 作者:搜寻专家 更新时间:2023-10-31 19:42:04 26 4
gpt4 key购买 nike

我遇到了一个 Java 示例代码,它给我带来了一个问题。

Java 示例代码是:

...
public interface CLibrary extends Library {
CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
void printf(String format, Object... args);
}

public static void main(String[] args) throws IOException {
CLibrary.INSTANCE.printf("Hello, World\n");
}

但是在C#中我们不能这样写:

public interface IMyInterface {
static readonly int staticInt = 5; // compile error
static readonly SomeClass staticInstance = new SomeClass(); // compile error
}

这两种语言/框架有什么区别?

什么设计策略允许 java 在接口(interface)中有 const 字段,或者是什么阻止 .NET 有这个?

最佳答案

如今,在 Java 中,使用接口(interface)来保存常量通常也不受欢迎。 (我会说像您的示例那样存储非编译时间常数字段更令人不悦。)

从根本上说,它与接口(interface)的概念不一致:实现将维护的契约。实现不会提供字段,那么它在那里做什么?

我怀疑 C# 团队认为它与接口(interface)背后的概念完全不一致,因此不将其包含在语言中。我不知道这只是 C# 限制还是 CLR 限制。例如,我知道 CLR 允许接口(interface)声明嵌套类型,但 C# 目前不允许这样做。

关于java - 为什么 Java 允许接口(interface)具有静态只读字段而 .NET 接口(interface)不能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3381044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com