由特定于语言的字符引起的“找不到字段的获取器/设置器”

时间:2018-11-24 22:23:34

标签: android android-studio

我已经从Room和Firebase之类的库中收到“找不到getter / setter”错误,即使驼峰式语法看起来正确也是如此。此错误仅适用于名称以“ i”开头的字段。

在我的语言中,“ i”的大写字母是“İ”,事实证明编译器正在寻找“İ”而不是“ I”。因此,例如,如果字段名称为“ id”,Room将查找名称为“getİd”的方法。

如何禁用此功能?

编辑:是的,我可以将所有“ I”替换为“İ”,或者将字段重命名为其他名称,这样便可以解决该问题。但这很奇怪,我想保持标准状态。

更新:在Android Studio 3.3中,我还必须在gradle文件中将I更改为İ,否则它们将给出错误。例如:testImplementation到testİmplementation

2 个答案:

答案 0 :(得分:1)

您可以更改模板。 这是名为Test的类:

public class Test {
    int id;


}

Alt + Insert并单击Getter,它将弹出一个对话框 enter image description here

点击...按钮,您将看到模板: enter image description here

现在替换为

#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模板应用相同的修复程序。

完整的模板应如下所示:

IntelliJ IDEA modified Getter template for Turkish i character