Scala public在从Java访问时变为私有?

Scala public在从Java访问时变为私有?,java,scala,maven,scala-java-interop,Java,Scala,Maven,Scala Java Interop,我非常熟悉Java和Maven,但对Scala一点也不熟悉。我试图从Java访问Scala,但我似乎无法理解的一个问题是: 我的问题 在AccessScala.java中,我尝试使用inmodule.scala访问中的变量: package me.parent.jModule; 公共类访问Scala{ 公共静态void main(字符串[]args){ WithinModule in=新建WithinModule(); //--这就像一个静态变量 System.out.println(Withi

我非常熟悉Java和Maven,但对Scala一点也不熟悉。我试图从Java访问Scala,但我似乎无法理解的一个问题是:

我的问题 在
AccessScala.java
中,我尝试使用inmodule.scala访问
中的变量:

package me.parent.jModule;
公共类访问Scala{
公共静态void main(字符串[]args){
WithinModule in=新建WithinModule();
//--这就像一个静态变量
System.out.println(WithinModule.string);
//--这就像一个实例变量
System.out.println(在.string内);
//--这是一个getter,在Java中应该是这样的
System.out.println(在.getString()内);
}
}
这个变量

package me.parent.jModule;
用in模块初始化{
val string:string=“这是本地scala字符串”;
}
但是当运行
mvn clean package
时,它告诉我这个变量是私有的:

[ERROR] [Error] C:\projectLocation\parent\jModule\src\main\java\me\parent\jModule\AccessScala.java:7: string has private access in me.parent.jModule.WithinModule
[ERROR] [Error] C:\projectLocation\parent\jModule\src\main\java\me\parent\jModule\AccessScala.java:9: string has private access in me.parent.jModule.WithinModule
基本上,我是误解了这应该如何工作,还是我做错了什么

项目设置 我提出了这个项目,并总结了可能与此相关的内容。文件是这样组织的

>父级
|>jModule
||>src/main
|| |>java/me/parent/jModule
|| | |>AccessScala.java
|| |>scala/me/parent/jModule
|| | |>within module.scala
||>pom.xml
|>sModule
||>src/scala/me/parent/sModule
|| |>ExternalModule.scala
||>pom.xml
|>pom.xml
我的父母
pom.xml
主要是从我的父母那里得到的。经过一些修改,结果如下所示。这种精确的设置在另一个项目上运行良好,在这个项目中(到目前为止)只有一种情况,Java使用的是用Scala编写的类,但两种语言都有大量的代码。在我们尝试从Java中的Scala访问
val
s之前,所有的测试和测试都很顺利

我使用Maven编译器、surefire和failsafe插件编译和测试Java(还没有测试),使用Scala Maven和ScalaTest插件编译和测试Scala代码(也没有测试)。它们被配置为首先编译和测试Scala,然后再转到Java


4.0.0
我
父母亲
0.0.1-快照
聚甲醛
UTF-8
11
11
org.junit.jupiter
朱尼特木星发动机
5.5.1
org.scala-lang
scala图书馆
2.13.1
org.scalatest
比例测试2.13
3.1.0
测试
org.apache.maven.plugins
maven编译器插件
3.8.1
11
11
org.apache.maven.plugins
maven surefire插件
3.0.0-M3
org.apache.maven.plugins
maven故障保护插件
3.0.0-M3
net.alchim31.maven
scala maven插件
4.3.1
scala先编译
过程资源
添加源
编译
org.scalatest
scalatest maven插件
1
${project.build.directory}/surefire报告
.
WDF TestSuite.txt
测试
过程测试资源
测试
jModule
sModule
附言
如有任何建议,将不胜感激。正如我提到的,我正试图让Java和Scala一起工作,我听说这应该很容易,但我一直遇到问题,这就是其中之一

分析
scalac-print
输出我们看到

class WithinModule {
  val string : String = "this is the local scala string"
}
扩展到类似

  class iw$WithinModule extends Object {
    private[this] val string: String = _;
    <stable> <accessor> def string(): String = iw$WithinModule.this.string;
    def <init>(): $line184.iw$WithinModule = {
      iw$WithinModule.super.<init>();
      iw$WithinModule.this.string = "this is the local scala string";
      ()
    }
  }

Scala创建了
string()
方法,该方法充当仍然是私有的
string
属性的访问器。因此,如果您想在Java中使用它,只需调用
string()
从Scala调用Java相当简单(使用
JavaConverters
package),但由于答案中概述的原因,使用另一种方法通常更困难。
WithinModule within = new WithinModule();
System.out.println(within.string());