斯卡拉 "constructor Stopwatch cannot be accessed in class Main"
Scala "constructor Stopwatch cannot be accessed in class Main"
关于解决方案的总结,我以为我正在处理 Scala 问题,但事实证明 Stopwatch 和 Scala Logging 有私有构造函数,我没有调用正确的 public 方法来实例化它们。 gzm0 下面的回答指出了这一点。
尝试使用 Guava Stopwatch 和 Scala Logging,无论我是在 Main 中还是在实例化的 class 中创建 new Stopwatch()
或 new Logger()
我都会收到此错误 gradle run
:
constructor Logger in class Logger cannot be accessed in class RedBlackTree4150
var loggerInst = new Logger()
constructor Stopwatch in class Stopwatch cannot be accessed in class RedBlackTree4150
var stopWatchInst = new Stopwatch()
如果这是 this or question I don't know enough to realize it. I looked at this question 的副本,但没有可接受的答案,我尝试(只是为了好玩)取消我的 parens 构造函数调用,但无济于事。
正在编写我的第一个 Gradle/Scala 算法分析项目。 我想如果我在 Java 我会问静态与静态。 non-static,不确定这是否是我正在处理的问题类型。 Scala 不是作业的一部分,所以我没有使用作业标签。
这是我如何调用它们以及我的程序的第一部分,the full .scala file and the build.gradle are on Github
import com.google.common.base.Stopwatch
import com.typesafe.scalalogging.slf4j.Logger
import scala.collection.immutable.TreeMap
import java.util.concurrent.TimeUnit
object Main extends App {
// var rbtree = new RedBlackTree4150(logger, stopWatch)
var rbtree = new RedBlackTree4150()
}
// class RedBlackTree4150 (var loggerInst: Logger, var stopWatchInst: Stopwatch) {
class RedBlackTree4150() {
var loggerInst = new Logger()
var stopWatchInst = new Stopwatch()
如您所见,我已尝试通过将其全部设为一个 Object 并通过在 Main 中实例化 Logger 和 Stopwatch 并将它们传递给 class(我知道这是个坏主意)来简化它,但是none 有效。我在这里缺少什么简单的 Scala 东西?谢谢。
否则我相信我在项目中正确地拥有了我的所有依赖项,并且我在命令行上得到了同样的错误。
我还有一个错误 以防万一它是相关的,错误是:
/home/jim/workspace/Scala/RedBlackTree4150/src/main/scala/Main.scala:36: value map is not a member of Double
timingsMap = for (i <- powersList; j <- runTest(i)) yield i -> j
Stopwatch
和 Logger
的构造函数都是私有的。您需要使用工厂方法来实例化它们。
如果是 Stopwatch
,您可以使用 createUnstarted()
方法:
val stopwatch = Stopwatch.createUnstarted()
如果是Logger
,则必须使用apply
方法。但是,它需要一个底层的 SLF4J 记录器。您可以通过 SLF4J 的 LoggerFactory
:
创建一个
import org.slf4j.LoggerFactory
val logger = Logger(LoggerFactory.getLogger(getClass))
关于解决方案的总结,我以为我正在处理 Scala 问题,但事实证明 Stopwatch 和 Scala Logging 有私有构造函数,我没有调用正确的 public 方法来实例化它们。 gzm0 下面的回答指出了这一点。
尝试使用 Guava Stopwatch 和 Scala Logging,无论我是在 Main 中还是在实例化的 class 中创建 new Stopwatch()
或 new Logger()
我都会收到此错误 gradle run
:
constructor Logger in class Logger cannot be accessed in class RedBlackTree4150
var loggerInst = new Logger()
constructor Stopwatch in class Stopwatch cannot be accessed in class RedBlackTree4150
var stopWatchInst = new Stopwatch()
如果这是 this or
正在编写我的第一个 Gradle/Scala 算法分析项目。 我想如果我在 Java 我会问静态与静态。 non-static,不确定这是否是我正在处理的问题类型。 Scala 不是作业的一部分,所以我没有使用作业标签。
这是我如何调用它们以及我的程序的第一部分,the full .scala file and the build.gradle are on Github
import com.google.common.base.Stopwatch
import com.typesafe.scalalogging.slf4j.Logger
import scala.collection.immutable.TreeMap
import java.util.concurrent.TimeUnit
object Main extends App {
// var rbtree = new RedBlackTree4150(logger, stopWatch)
var rbtree = new RedBlackTree4150()
}
// class RedBlackTree4150 (var loggerInst: Logger, var stopWatchInst: Stopwatch) {
class RedBlackTree4150() {
var loggerInst = new Logger()
var stopWatchInst = new Stopwatch()
如您所见,我已尝试通过将其全部设为一个 Object 并通过在 Main 中实例化 Logger 和 Stopwatch 并将它们传递给 class(我知道这是个坏主意)来简化它,但是none 有效。我在这里缺少什么简单的 Scala 东西?谢谢。
否则我相信我在项目中正确地拥有了我的所有依赖项,并且我在命令行上得到了同样的错误。
我还有一个错误
/home/jim/workspace/Scala/RedBlackTree4150/src/main/scala/Main.scala:36: value map is not a member of Double
timingsMap = for (i <- powersList; j <- runTest(i)) yield i -> j
Stopwatch
和 Logger
的构造函数都是私有的。您需要使用工厂方法来实例化它们。
如果是 Stopwatch
,您可以使用 createUnstarted()
方法:
val stopwatch = Stopwatch.createUnstarted()
如果是Logger
,则必须使用apply
方法。但是,它需要一个底层的 SLF4J 记录器。您可以通过 SLF4J 的 LoggerFactory
:
import org.slf4j.LoggerFactory
val logger = Logger(LoggerFactory.getLogger(getClass))