我收到编译错误" 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的任何后代都不能实现除了与其字段相关的任何内容。这是正确的还是有某种方法来注释这个方法,以便你的处理器忽略它?
由于
答案 0 :(得分:0)
似乎RealmObject的任何后代都无法实现除与其字段相关的任何内容之外
这是对的。 Realm object只能为其成员变量设置getter和setter。
来自文档:
由于代理类如何覆盖模型类中的getter和setter,因此对模型类中允许的内容有一些限制:
- 仅限私有实例字段。
- 仅限默认的getter和setter方法。
- 静态字段,包括公共字段和私有字段。
- 静态方法。
- 使用无方法实现接口。
这意味着目前无法扩展除RealmObject以外的任何内容或覆盖toString()或equals()等方法。
从Realm 0.87.4开始就是如此。如果/知道什么时候解除这个限制,我不会。
答案 1 :(得分:0)
我希望这不受支持。使用Factory
类来实现此功能。写一个包装类Link
答案 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();