编译器(sun-jdk-8u51)接受以下代码行,没有任何警告或错误:
short b = true ? 1 : 1;
Run Code Online (Sandbox Code Playgroud)
而接下来的两个代码行导致编译错误(不兼容的类型:可能从int转换为short的有损转换):
boolean bool = true;
short s = bool ? 1 : 1;
Run Code Online (Sandbox Code Playgroud)
为什么编译器在第二种情况下不能执行原始整数1 的相同缩小转换?
我正在使用 Kotlin 多平台构建一个库,该库应该由本机 JVM 和 Node 应用程序使用。我正在努力为 Node 版本提供惯用的 API,因为 Kotlin将包结构公开给 JavaScript。
我希望在包内的公共源集中定义我的实体com.company.myclientlib.common
:
// sourceSet: common
package com.company.myclientlib.common
data class Product(
val id: String,
val name: String,
val displayName: String
// ...
)
Run Code Online (Sandbox Code Playgroud)
这样Product
在 Node 应用程序中创建新的 s 看起来像:
// sourceSet: common
package com.company.myclientlib.common
data class Product(
val id: String,
val name: String,
val displayName: String
// ...
)
Run Code Online (Sandbox Code Playgroud)
我已经尝试去@JsName("Product")
上课了Product
。尽管名称可以影响@JsName
,但包仍然会以相同的方式暴露。
有没有什么方法可以不暴露 JavaScript 中的包,Product
而无需重新实现库代码的 JavaScript sourceSet 中的类型?
注意 …
我的服务器响应包含一组已知和未知的属性.对于已知的,我创建了一个DTO类,其中包含每个属性的成员.未知属性应放在用[ExtensionData]
属性注释的字典中:
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class Dto
{
[JsonExtensionData]
private readonly Dictionary<string, object> unknownProperties = new Dictionary<string, object>();
public IDictionary<string, object> UnknownProperties
{
get
{
return new ReadOnlyDictionary<string, object>(this.unknownProperties);
}
}
[JsonProperty(Required = Required.Default, PropertyName = "KNOWN_PROPERTY")]
public string KnownProperty { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
Null
被允许作为值KnownProperty
.如果我尝试反序列化包含的JSON对象,如果我配置了序列化程序,则KNOWN_PROPERTY : null
该属性也包含在字典中.即使存在以下类成员,也会执行此操作:UnknownProperties
NullValueHandling.Ignore
KNOWN_PROPERTY
static void Main(string[] args)
{
string jsonString = @"{
KNOWN_PROPERTY : null,
UNKNOWN_PROPERTY : null
}";
JsonSerializer serializer = JsonSerializer.CreateDefault(new JsonSerializerSettings() …
Run Code Online (Sandbox Code Playgroud)