小编ren*_*ene的帖子

如果在三元运算符中使用局部变量,为什么从int到short的缩小转换不起作用

编译器(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 的相同缩小转换

java type-narrowing

9
推荐指数
1
解决办法
235
查看次数

如何在多平台 Kotlin 项目中隐藏 JavaScript 目标的包结构

我正在使用 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 中的类型?

注意 …

kotlin kotlin-multiplatform

5
推荐指数
1
解决办法
140
查看次数

尽管匹配了类成员,NullValueHandling.Ignore会将反序列化影响到[ExtensionData]

我的服务器响应包含一组已知和未知的属性.对于已知的,我创建了一个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该属性也包含在字典中.即使存在以下类成员,也会执行此操作:UnknownPropertiesNullValueHandling.IgnoreKNOWN_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)

c# serialization json.net

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