Getter不与任何字段相关联

时间:2016-02-24 03:22:30

标签: java realm

我收到编译错误" Getter getLength_inch未与任何字段相关联"对于以下代码。 getLength_inch只是一种实用方法...

import io.realm.RealmObject;  
public class Measurement extends RealmObject {
    private float length_mm;

    public void setLength_mm(float c){length_mm = c;}
    public float getLength_mm() { return length_mm;}

    public float getLength_inch() { return length_mm * 0.0394f;}  
}

似乎RealmObject的任何后代都不能实现除了与其字段相关的任何内容。这是正确的还是有某种方法来注释这个方法,以便你的处理器忽略它?

由于

3 个答案:

答案 0 :(得分:0)

  

似乎RealmObject的任何后代都无法实现除与其字段相关的任何内容之外

这是对的。 Realm object只能为其成员变量设置getter和setter。

来自文档:

  

由于代理类如何覆盖模型类中的getter和setter,因此对模型类中允许的内容有一些限制:

     
      
  • 仅限私有实例字段。
  •   
  • 仅限默认的getter和setter方法。
  •   
  • 静态字段,包​​括公共字段和私有字段。
  •   
  • 静态方法。
  •   
  • 使用无方法实现接口。
  •   
     

这意味着目前无法扩展除RealmObject以外的任何内容或覆盖toString()或equals()等方法。

从Realm 0.87.4开始就是如此。如果/知道什么时候解除这个限制,我不会。

答案 1 :(得分:0)

我希望这不受支持。使用Factory类来实现此功能。写一个包装类Link

Reference to support issue

答案 2 :(得分:0)

作为一种解决当前不允许@Ignore on方法的realm.io限制的工作,我使用内部类并将其他功能作为"扩展"。通过这种方式,主类仍然保持最小化,并且领域不会抱怨我还有其他功能并保持某种形式的优雅。

public class Measurement extends RealmObject {
  private float length_mm;
  @Ignore
  private Extension ex;

  public void setLength_mm(float c){length_mm = c;}
  public float getLength_mm() { return length_mm;}

  public class Extension {
     public float getLength_inch() { return length_mm * 0.0394f;}  
  }
  public Extension getEx(){
    if (ex == null) ex = new Extension();
    return ex;
  }

然后我使用getEx()来访问"扩展方法"。

float l = myMeasurement.getEx().getLength_inch();