从科特林docs
object Obj {
const val CONST = 1
}
足以以Obj.CONST
的身份从Java访问
但是类似的错误。
object StringUtils {
const val UNESCAPE_HTML4 = "... ..."
......
}
使用Java代码
return StringUtils.UNESCAPE_HTML4;
错误
'UNESCAPE_HTML4' has private access in com.data.utils.StringUtils
必须使用StringUtils.INSTANCE.getUNESCAPE_HTML4()
,然后没有错误。
点击该UNESCAPE_HTML4
确实可以正确打开编译后的代码。
唯一的区别是此对象StringUtils来自于libray依赖项,该依赖项已添加到项目的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]);
}
}
}
IDE在其上显示红色,并显示“非静态方法...”,
或者“具有私人访问权限...”
但是,当单击所抱怨的函数或属性时,它会打开正确的编译文件
和
运行时,打印输出显示正确调用的功能。
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]:>
更奇怪的是,来自同一个库的其他函数和属性是通过不同对象类的const或@JvmStatic公开的,它们不会被IDE抱怨。
答案 0 :(得分:1)
这里有几点:
如果清理/重建无济于事,则应删除整个项目并再次导入。