Как создать псевдоним для доступа к статическим методам класса Java

Пытаясь избежать проблемы, описанной в разделе Как предоставить реализацию классов JDK (например, java.awt) в проекте Scala.js?, я придумал решение с использованием другого пакета и перенаправлением (алиасингом) классов awt в него на JVM (в Scala.js я просто предоставляю заглушки прямо в этом пакете):

package object jawt {

  type RenderingHints = java.awt.RenderingHints
  object RenderingHints {
    type Key = java.awt.RenderingHints.Key

    val KEY_TEXT_ANTIALIASING = java.awt.RenderingHints.KEY_TEXT_ANTIALIASING
    val VALUE_TEXT_ANTIALIAS_ON = java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_ON
  }

  type Color = java.awt.Color

  object Color {
    val GREEN = java.awt.Color.GREEN
    val YELLOW = java.awt.Color.YELLOW
    val WHITE = java.awt.Color.WHITE
    val BLACK = java.awt.Color.BLACK
    val RED = java.awt.Color.RED
  }

  object image {
    type BufferedImage = java.awt.image.BufferedImage
    object BufferedImage {
      val TYPE_INT_RGB = java.awt.image.BufferedImage.TYPE_INT_RGB
    }
  }
  type Graphics2D = java.awt.Graphics2D
}

Это работает довольно хорошо, единственное, что мне не нравится, это то, что мне приходится писать отдельный псевдоним для любого статического члена любого класса Java, который я использую. При использовании этого пакета часто пишут, например. g2d.setColor(jawt.Color.BLACK). Обычно при работе с классами Scala это решается путем создания псевдонима для объекта-компаньона, например:

  type Color = scala.awt.Color
  val Color = scala.awt.Color

Это не работает с Java, так как java.awt.Color не является значением (см. также статические члены класса Java и совместимость Scala):

класс java.awt.Color не является значением

При псевдониме только типа компилятор Scala не может получить доступ к статическим методам:

объект Color не является членом пакета net.gamatron.jawt

Примечание: тип Color существует, но не имеет сопутствующего объекта.

Есть ли способ создать псевдоним класса Java, чтобы к статическим значениям и методам можно было получить доступ через псевдоним?


person Suma    schedule 26.01.2021    source источник