首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问kotlin类中的字段并忽略getter

访问kotlin类中的字段并忽略getter
EN

Stack Overflow用户
提问于 2020-01-18 22:50:51
回答 1查看 375关注 0票数 1

考虑java中的这个类(数据既不是私有的,也不是公共的):

代码语言:javascript
复制
public class Poo {
    String data = null;

    public String getData() {
        if (data == null)
            return "";
        else
            return data.substring(0, 4);
    }

    public void setData(String data) {
        this.data = data;
    }

    public String getDataPart2() {
        if (data == null)
            return "";
        return data.substring(4);
    }
}

我将这个类转换为kotlin

代码语言:javascript
复制
class Poo1 {
    var data: String? = null
        get() = field?.substring(4) ?: ""

    val dataPart2: String
        get() = data?.substring(4) ?: ""
}

反编译后的代码如下:

代码语言:javascript
复制
   @NotNull
   public final String getDataPart2() {
      String var10000 = this.getData();
      if (var10000 != null) {
         String var1 = var10000;
         byte var2 = 4;
         boolean var3 = false;
         if (var1 == null) {
            throw new TypeCastException("null cannot be cast to non-null type java.lang.String");
         }

         var10000 = var1.substring(var2);
         Intrinsics.checkExpressionValueIsNotNull(var10000, "(this as java.lang.String).substring(startIndex)");
         if (var10000 != null) {
            return var10000;
         }
      }

      var10000 = "";
      return var10000;
   }

在kotlin类中,dataPart2调用了数据获取方法(查看反编译代码中的第2行),但是我需要访问数据的实际值,而不是获取方法,在kotlin中是否可以访问字段而不调用获取方法?我不想更改getter或方法的名称。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-18 23:02:10

不,这不可能。我强烈建议改变类的设计: setter设置完整的数据,而getter只获取数据的第一部分,这使得它非常令人惊讶,从而成为bug的来源。

但不管怎样,如果你想保留你在Kotlin中拥有的东西,你可以使用这个:

代码语言:javascript
复制
class Poo {
    private var completeData: String? = null

    var data: String
        get() = completeData?.substring(0, 4) ?: ""
        set(value) { completeData = value }

    val dataPart2: String
        get() = completeData?.substring(4) ?: ""
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59801696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档