为什么在访问对象类';Java代码中的s const字段
科特林酒店 从Java作为为什么在访问对象类';Java代码中的s const字段,java,kotlin,Java,Kotlin,科特林酒店 从Java作为Obj.CONST 但在类似的情况下,它得到了错误 object StringUtils { const val UNESCAPE_HTML4 = "... ..." ...... } 在Java代码中 return StringUtils.UNESCAPE_HTML4; 出错 'UNESCAPE_HTML4' has private access in com.data.utils.StringUtils 必须使用StringUtils.INST
Obj.CONST
但在类似的情况下,它得到了错误
object StringUtils {
const val UNESCAPE_HTML4 = "... ..."
......
}
在Java代码中
return StringUtils.UNESCAPE_HTML4;
出错
'UNESCAPE_HTML4' has private access in com.data.utils.StringUtils
必须使用StringUtils.INSTANCE.getUNESCAPE\u HTML4()
则无错误
但是,单击UNESCAPE\u HTML4
确实可以正确打开编译后的代码
唯一的区别是,该对象StringUtils与已添加到项目build.gradle中的库依赖项不同
有人也看到这种类型的错误吗
这里是Java端的一个测试函数,它尝试从依赖库访问这些函数、属性
public class DataWrapper {
... ...
public void test_strUtil() {
/*
* For example, the string "<Français>"
* will become "<Franais>"
*/
String s = StringUtils.unescapeHtml4("&lt;Fran&ccedil;ais&gt;");
int s2 = Constants.CONTROLLER_FANTASY_SPORTS_STREAM;
String[][] arr = EntityArrays.BASIC_UNESCAPE();
Log.i("+++", "+++ test_strUtil(), after DataPlay.init(), unescapeHtml4:"+s+", empty:"
+StringUtils.EMPTY+" --- s2:"+s2);
for (int i=0; i<arr.length; i++) {
String[] arrRow = arr[i];
for (int j=0; j< arrRow.length; j++) {
Log.w("+++", "+++ arrRow["+i+"]["+j+"]:"+arrRow[j]);
}
}
}
公共类数据包装器{
... ...
公共空隙试验{
/*
*例如,字符串“<;Franç;ais>;”
*将成为“法国人”
*/
字符串s=StringUtils.unescapethml4(<;Fran&;ccedil;ais>;);
int s2=常量。控制器\u幻想\u运动\u流;
字符串[][]arr=EntityArrays.BASIC_UNESCAPE();
Log.i(“+++”,“+++test_strUtil(),在DataPlay.init()之后,unescapethml4:“+s+”,空:”
+StringUtils.EMPTY+“--s2:+s2);
对于(int i=0;i
或“拥有私人访问权…”
但是,当单击被投诉的函数或属性时,它确实会打开正确的编译文件
及
当它运行时,打印输出显示正确调用的函数
com.test.debug I/+++: +++ test_strUtil(), after DataPlay.init(),
unescapeHtml4:<Français>, empty: --- s2:3
com.test.debug W/+++: +++ arrRow[0][0]:"
+++ arrRow[0][1]:"
+++ arrRow[1][0]:&
+++ arrRow[1][1]:&
+++ arrRow[2][0]:<
+++ arrRow[2][1]:<
+++ arrRow[3][0]:>
+++ arrRow[3][1]:>
com.test.debug I/+++:+++test_strUtil(),在DataPlay.init()之后,
unescapethl4:Franç;ais,空:--s2:3
com.test.debug W/+++:+++arrRow[0][0]:“
+++arrRow[0][1]:“
+++arrRow[1][0]:&;
+++arrRow[1][1]:&
+++arrRow[2][0]:
+++阿罗[2][1]:<
+++arrRow[3][0]:
+++arrRow[3][1]:>
更奇怪的是,来自同一个库的另一个函数和属性通过不同对象类的const或@JvmStatic公开,它们不会受到IDE的抱怨。这里有几点:
该错误仅在IDE中出现,而不是在编译期间出现
仅当类位于库中时发生(我尝试在同一项目中重现类的问题,它按预期工作)
如果清理/重建没有帮助,删除整个项目并再次导入它应该会有帮助。尝试重现您的问题,但似乎一切正常。如何构建此“库”是你的吗?@Alexey,这个库来自另一个库项目,发布到maven,并在这个项目中添加了对它的依赖性。你能重建这个库吗?因为它应该可以工作,我的假设是它是由一个旧的Kotlin编译器构建的,大约1.0I不断地重建,我的AndroidStudio是3.1.3,Kotlin是1.2.60Ok,所以你忘了重新编译我认为问题不在于代码,而在于IDE。愚蠢的问题,但是你有没有尝试清理项目?IntelliJ保留内部缓存。
com.test.debug I/+++: +++ test_strUtil(), after DataPlay.init(),
unescapeHtml4:<Français>, empty: --- s2:3
com.test.debug W/+++: +++ arrRow[0][0]:"
+++ arrRow[0][1]:"
+++ arrRow[1][0]:&
+++ arrRow[1][1]:&
+++ arrRow[2][0]:<
+++ arrRow[2][1]:<
+++ arrRow[3][0]:>
+++ arrRow[3][1]:>