反编译scala';Android Studio中的s.class文件生成.java文件?

反编译scala';Android Studio中的s.class文件生成.java文件?,java,android,scala,Java,Android,Scala,首先,我对Scala和.class文件都不太了解(来自java和Scala) 我正在安卓上移植。项目中使用的一个库是flink runtime.jar,包含以下Scala文件: def setMemory(config: Configuration): Unit = { // set this only if no memory was pre-configured if (config.getInteger(ConfigConstants.TASK_MANAGER_MEMO

首先,我对Scala和.class文件都不太了解(来自java和Scala)

我正在安卓上移植。项目中使用的一个库是
flink runtime.jar
,包含以下Scala文件:

  def setMemory(config: Configuration): Unit = {
    // set this only if no memory was pre-configured
    if (config.getInteger(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, -1) == -1) {

      val bufferSize: Int = config.getInteger(
        ConfigConstants.TASK_MANAGER_MEMORY_SEGMENT_SIZE_KEY,
        ConfigConstants.DEFAULT_TASK_MANAGER_MEMORY_SEGMENT_SIZE)

      val bufferMem: Long = config.getLong(
        ConfigConstants.TASK_MANAGER_NETWORK_NUM_BUFFERS_KEY,
        ConfigConstants.DEFAULT_TASK_MANAGER_NETWORK_NUM_BUFFERS) * bufferSize.toLong

      val numTaskManager = config.getInteger(
        ConfigConstants.LOCAL_NUMBER_TASK_MANAGER,
        ConfigConstants.DEFAULT_LOCAL_NUMBER_TASK_MANAGER)

      val memoryFraction = config.getFloat(
        ConfigConstants.TASK_MANAGER_MEMORY_FRACTION_KEY,
        ConfigConstants.DEFAULT_MEMORY_MANAGER_MEMORY_FRACTION)

      // full memory size
      var memorySize: Long = EnvironmentInformation.getSizeOfFreeHeapMemoryWithDefrag

      // compute the memory size per task manager. we assume equally much memory for
      // each TaskManagers and each JobManager
      memorySize /= numTaskManager + 1 // the +1 is the job manager

      // for each TaskManager, subtract the memory needed for memory buffers
      memorySize -= bufferMem
      memorySize = (memorySize * memoryFraction).toLong
      memorySize >>>= 20 // bytes to megabytes
      config.setLong(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, memorySize)
    }
  }
runtime/minicluster/LocalFlinkMiniCluster.scala

Intellij IDEA反编译包含
.jar
文件的
LocalFlinkMiniCluster.class
时,将显示正确且原始的
LocalFlinkMiniCluster.scala

这在Android studio中不会发生。相反,返回的java代码包含以下消息:

反编译的.class文件,字节码版本:50.0(Java6)

为了让您更好地理解我所说的内容,以下是原始.scala文件中的方法
setMemory

  def setMemory(config: Configuration): Unit = {
    // set this only if no memory was pre-configured
    if (config.getInteger(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, -1) == -1) {

      val bufferSize: Int = config.getInteger(
        ConfigConstants.TASK_MANAGER_MEMORY_SEGMENT_SIZE_KEY,
        ConfigConstants.DEFAULT_TASK_MANAGER_MEMORY_SEGMENT_SIZE)

      val bufferMem: Long = config.getLong(
        ConfigConstants.TASK_MANAGER_NETWORK_NUM_BUFFERS_KEY,
        ConfigConstants.DEFAULT_TASK_MANAGER_NETWORK_NUM_BUFFERS) * bufferSize.toLong

      val numTaskManager = config.getInteger(
        ConfigConstants.LOCAL_NUMBER_TASK_MANAGER,
        ConfigConstants.DEFAULT_LOCAL_NUMBER_TASK_MANAGER)

      val memoryFraction = config.getFloat(
        ConfigConstants.TASK_MANAGER_MEMORY_FRACTION_KEY,
        ConfigConstants.DEFAULT_MEMORY_MANAGER_MEMORY_FRACTION)

      // full memory size
      var memorySize: Long = EnvironmentInformation.getSizeOfFreeHeapMemoryWithDefrag

      // compute the memory size per task manager. we assume equally much memory for
      // each TaskManagers and each JobManager
      memorySize /= numTaskManager + 1 // the +1 is the job manager

      // for each TaskManager, subtract the memory needed for memory buffers
      memorySize -= bufferMem
      memorySize = (memorySize * memoryFraction).toLong
      memorySize >>>= 20 // bytes to megabytes
      config.setLong(ConfigConstants.TASK_MANAGER_MEMORY_SIZE_KEY, memorySize)
    }
  }
这是Android Studio创建的java版本(亚洲符号到底是什么?)

显然,这两种方法的执行效果不同


请问,你能帮我理解为什么会发生这种情况,我如何解决这个问题?谢谢

我自己发现了问题:Scala插件默认安装在IntelliJ上(或者在向导中有一个选项)。在Android Studio中,它必须手动安装。

根据一本在线词典,亚洲符号的意思是“闪耀;闪耀;闪耀”。除此之外,我不知道如何提供帮助,也不确定您所做的是否被称为“移植”。+1了解有关亚洲符号含义的真正有用信息。但我仍然需要理解为什么会发生这种情况。你确定Intellij Idea反编译.class文件吗?评论将如何呈现?正如您在java版本中看到的,常量是内联的,所以我猜亚洲符号是,在转换为int等于
ConfigConstants之后。默认值\u任务\u管理器\u内存\u段\u大小
为什么要反编译类文件而不使用flink源代码?另一个原因可能是:IntelliJ使用了依赖项的源代码,在Android Studio中设置的方式可能不同。这就是为什么您在IntelliJ中看到原始源代码,而Android Studio反编译类文件。