Android &引用;找不到字段“的getter/setter”;由特定语言字符引起的

Android &引用;找不到字段“的getter/setter”;由特定语言字符引起的,android,android-studio,Android,Android Studio,我从Room和Firebase等库中得到了“找不到getter/setter”错误,尽管camel-case语法似乎是正确的。此错误仅适用于名称以“i”开头的字段 在我的语言中,“i”的大写字母是“İ”,而编译器寻找的是“İ”而不是“i”。因此,例如,如果字段名为“id”,Room将查找名为“getİd”的方法 如何禁用此功能 编辑:是的,我可以用“İ”替换所有的“i”,或者将字段重命名为其他内容,这样就可以解决这个问题。但这太奇怪了,我想以一种标准的方式 更新:在Android Studio

我从Room和Firebase等库中得到了“找不到getter/setter”错误,尽管camel-case语法似乎是正确的。此错误仅适用于名称以“i”开头的字段

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

如何禁用此功能

编辑:是的,我可以用“İ”替换所有的“i”,或者将字段重命名为其他内容,这样就可以解决这个问题。但这太奇怪了,我想以一种标准的方式


更新:在Android Studio 3.3中,我还必须在gradle文件中将I改为İ,否则他们会给出一个错误。示例:testImplementation要测试İImplementation

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

public class Test {
    int id;


}
Alt+Insert
并单击Getter,将弹出一个对话框

单击
按钮,您将看到模板:

现在替换为

#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))
#set($name = $StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project))))


现在getter名称应该是
getid

,它似乎是您使用的IntelliJ IDEA代码生成器或库中的一个bug。虽然正确的解决方案是联系IntelliJ IDEA支持并提交错误报告,但我们可能需要等待很长时间才能修复。同时,您可以使用以下变通方法

执行方式:打开,但不要修改“IntelliJ默认”模板。复制模板并替换

这是引导“i”资本化的简单变通方法。对Setter模板应用相同的修复

完整模板应如下所示:


有趣的案例。什么语言?土耳其语?
编译器正在寻找“İ”而不是“I”
这句话的任何证据?你能分享更多细节吗?错误消息、堆栈跟踪、房间和Firebase版本?是的,土耳其语我没有确凿的证据,通过手动将I改为İ,错误就消失了
#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