从细化中获取正在细化的类

问题描述

考虑以下sealed trait

sealed trait Type

object Type {
    case object S
}

sealed trait Test{
    type Tpe <: Type
}

object Test {
    type Aux[T <: Type] = Test{ type Tpe = T }
}

给定一个表示 ClassSymbolTest.Aux[S.type] 有没有办法得到一个表示 ClassSymbolsealed trait Test

解决方法

在深入研究 API 后,我找到了以下解决方案:

def refinedSealedTrait(symbol: Symbols#Symbol): Symbol = {
  if (!symbol.isRefinementClass) {
    return false
  }
  val parents = symbol.parentSymbols
  if (parents.size != 1) {
    return false
  }
  val parentSymbol = parents.iterator.next

  if (parentSymbol.isSealed && parentSymbol.isTrait) {
    parentSymbol
  } else {
    c.abort(...)
  }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...