Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 如何在Scala中访问泛型类型的类型别名?_Generics_Scala_Types_Alias - Fatal编程技术网

Generics 如何在Scala中访问泛型类型的类型别名?

Generics 如何在Scala中访问泛型类型的类型别名?,generics,scala,types,alias,Generics,Scala,Types,Alias,也就是说,我想为enum编写我自己的valueOf,因为Scala设计器现在删除了这个方法(奇数调用--) [E it.toString==s.single()的定义值 不要太关注single,它只是一个类似Linq的包装器(请参阅:) 问题在于E值 问题: 如何正确访问此别名,即如何访问泛型类型的类型别名?请以此枚举为例 还有withName方法,即使它被认为是替换方法,但它被设计破坏了,value不是一个名称,因此我不会使用它来避免进一步混淆代码在做什么。示例的问题是枚举被声明为对象。无法

也就是说,我想为enum编写我自己的valueOf,因为Scala设计器现在删除了这个方法(奇数调用--)

[E it.toString==s.single()的定义值 不要太关注single,它只是一个类似Linq的包装器(请参阅:)

问题在于E值

问题: 如何正确访问此别名,即如何访问泛型类型的类型别名?请以此枚举为例


还有withName方法,即使它被认为是替换方法,但它被设计破坏了,value不是一个名称,因此我不会使用它来避免进一步混淆代码在做什么。

示例的问题是枚举被声明为对象。无法根据类名查找对象实例,因此需要一分钟或者更改修复了此问题。另外,对泛型执行find方法已偏离枚举中声明的抽象值类型,因此我们需要添加instanceOf来修复该类型 通用别名E#值正确。这提供了良好的键入

def valueOf[E <: Enumeration](enum: E, s : String): E#Value = 
  enum.values.find( { it => it.toString == s } ).get.asInstanceOf[E#Value]

object WeekDay extends Enumeration {
  val  Sun, Mon, Tue, Wed, Thu, Fri, Sat = Value
}
object Currency extends Enumeration {
  val USD, GBP, EUR = Value
}

val mySun: WeekDay.Value = valueOf(WeekDay,"Sun")
val myCur: Currency.Value = valueOf(WeekDay,"Sun") // fails to compile
def valueOf[E it.toString==s}).get.asInstanceOf[E#Value]
对象工作日扩展枚举{
周日、周一、周二、周三、周四、周五、周六=价值
}
对象货币扩展了枚举{
val美元、英镑、欧元=价值
}
val mySun:WeekDay.Value=valueOf(工作日,“太阳”)
val myCur:Currency.Value=valueOf(工作日,“Sun”)//编译失败

非常感谢。慢慢地,它陷入了“无法根据类名查找对象实例”:-(IOW)是否意味着调用E#Value的任何方法都是非法的,因为它是类,并且我需要对象来获取我实际定义为我的anum的对象(例如,工作日)?
def valueOf[E <: Enumeration](enum: E, s : String): E#Value = 
  enum.values.find( { it => it.toString == s } ).get.asInstanceOf[E#Value]

object WeekDay extends Enumeration {
  val  Sun, Mon, Tue, Wed, Thu, Fri, Sat = Value
}
object Currency extends Enumeration {
  val USD, GBP, EUR = Value
}

val mySun: WeekDay.Value = valueOf(WeekDay,"Sun")
val myCur: Currency.Value = valueOf(WeekDay,"Sun") // fails to compile