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

Java 访问kotlin类中的字段并忽略getter,java,kotlin,encapsulation,Java,Kotlin,Encapsulation,考虑java中的此类(数据不是私有的或公共的): 我将这个类转换为kotlin class Poo1 { var data: String? = null get() = field?.substring(4) ?: "" val dataPart2: String get() = data?.substring(4) ?: "" } 反编译代码如下所示: @NotNull public final String getDataP

考虑java中的此类(数据不是私有的或公共的):

我将这个类转换为kotlin

class Poo1 {
    var data: String? = null
        get() = field?.substring(4) ?: ""

    val dataPart2: String
        get() = data?.substring(4) ?: ""
}
反编译代码如下所示:


   @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调用数据getter(检查反编译代码中的第2行),但我需要访问数据的实际值而不是getter,在kotlin中是否可以访问字段而不调用getter?
我不想更改getter或方法名称。

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

但无论如何,如果您想保留Kotlin中的内容,您可以使用:

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) ?: ""
}

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

但无论如何,如果您想保留Kotlin中的内容,您可以使用:

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) ?: ""
}