我现在和其他人一起在grails项目中工作.我必须编写一些Java类.但我需要访问使用groovy创建的可搜索对象.看来,这个对象必须放在default-package中.
我的问题是:有没有办法从命名包中的Java类访问default-package中的这个对象?
我正在使用Eclipse 3.5,我创建了一个包含一些包结构和默认包的项目.我在默认包中有一个类 - Calculations.java,我想在任何一个包中使用该类(例如in com.company.calc
).当我尝试使用默认包中的类时,它给了我一个编译器错误.它无法识别默认包中的类.问题出在哪儿?
Calculations.java - 源代码
public class Calculations {
native public int Calculate(int contextId);
native public double GetProgress(int contextId);
static {
System.loadLibrary("Calc");
}
}
Run Code Online (Sandbox Code Playgroud)
我不能把我的班级放在任何其他包中.这个类有一些在Delphi中实现的本机方法.如果我将该类放在任何文件夹中,我将不得不对我想要避免的DLL进行更改(实际上 - 我不能).这就是为什么我把我的类放在默认包中.
我在访问根包中定义的对象时遇到问题.如果我将所有代码都放在一个文件中,它可以正常工作,但是当我将它分成两个文件时,我无法通过编译器.
这很好用:
所有在一个文件中称为packages.scala
:
object Foo
val name = "Brian"
}
package somepackage {
object Test extends App {
println(Foo.name)
}
}
Run Code Online (Sandbox Code Playgroud)
见证人:
$ scalac packages.scala
$ scala -cp . somepackage.Test
Brian
Run Code Online (Sandbox Code Playgroud)
但是如果我将代码分成两个文件:
packages.scala
object Foo {
val name = "Brian"
}
Run Code Online (Sandbox Code Playgroud)
packages2.scala
package somepackage {
object Test extends App {
println(Foo.name)
}
}
Run Code Online (Sandbox Code Playgroud)
一切都失败了:
$ scalac packages.scala packages2.scala
packages2.scala:3: error: not found: value Foo
Run Code Online (Sandbox Code Playgroud)
所以我尝试引用Foo
绝对:
...
println(_root_.Foo.name)
...
Run Code Online (Sandbox Code Playgroud)
但这也不起作用:
$ scalac packages.scala packages2.scala
packages2.scala:3: error: object …
Run Code Online (Sandbox Code Playgroud) 我有以下代码:(src/main/scala/coins/coins.scala)
object Main extends App {
def countChange(money: Int, coins: List[Int]): Int = {
[...]
Run Code Online (Sandbox Code Playgroud)
我试图从这样的测试中引用它:(src/test/scala/coins/CoinsSuite.scala)
package coins
import org.scalatest.FunSuite
class CoinsSuite extends FunSuite {
import Main.countChange
test("only onw way to pay $0") {
[...]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
找不到:值Main [error] import Main.countChange
但另一方面,从一个sbt控制台它工作正常
如果我在主文件中声明任何包,比如
package x
object Main extends App {
Console.println("Hello World!")
Run Code Online (Sandbox Code Playgroud)
然后我可以正确地发出import x.Main.countChange
root包或者我不知道的单例对象可见性是否存在限制?
- 添加
只是为了完成答案,SO上有几个有用的链接
我想在java中创建一个可以访问项目中所有其他类的类.
我在默认包中创建了它,现在无法看到.在java中执行此操作的最佳方法是什么?