我已经从Room和Firebase之类的库中收到“找不到getter / setter”错误,即使驼峰式语法看起来正确也是如此。此错误仅适用于名称以“ i”开头的字段。
在我的语言中,“ i”的大写字母是“İ”,事实证明编译器正在寻找“İ”而不是“ I”。因此,例如,如果字段名称为“ id”,Room将查找名称为“getİd”的方法。
如何禁用此功能?
编辑:是的,我可以将所有“ I”替换为“İ”,或者将字段重命名为其他名称,这样便可以解决该问题。但这很奇怪,我想保持标准状态。
更新:在Android Studio 3.3中,我还必须在gradle文件中将I更改为İ,否则它们将给出错误。例如:testImplementation到testİmplementation
答案 0 :(得分:1)
您可以更改模板。 这是名为Test的类:
public class Test {
int id;
}
按Alt + Insert
并单击Getter,它将弹出一个对话框
现在替换为
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
使用
#set($name = $helper.getPropertyName($field, $project))
现在吸气剂名称应为getid
。
答案 1 :(得分:1)
这似乎是您使用的IntelliJ IDEA代码生成器或库中的错误。虽然正确的解决方案是联系IntelliJ IDEA支持并提交错误报告,但我们可能需要等待很长时间才能获得修复。同时,您可以使用以下解决方法。
以navylover said的身份执行:打开Getter and Setter template dialog,但不要修改“ IntelliJ Default”模板。复制模板并替换
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
使用
#set($name = $StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))
#if($name.charAt(0) == 'i')
#set($name = 'İ' + $name.substring(1))
#else
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($name))
#end
这是引导'i'大写字母的简单解决方法。对Setter模板应用相同的修复程序。
完整的模板应如下所示: