代码之家  ›  专栏  ›  技术社区  ›  Vishrant

错误:find:AnyVal required:Int,如何在Scala中进行自动类型转换

  •  0
  • Vishrant  · 技术社区  · 7 年前

    我收到以下错误消息:

    [error]  found   : AnyVal
    [error]  required: Int
    

    但是 Int 延伸 AnyVal [1] 所以我相信 Java , Integer 可以从 Object 为什么它不起作用 Scala ,我错过了什么:

    [1] final abstract class Int private extends AnyVal
    

    我还尝试了一个简单的例子:

    val a: AnyVal = 5
    
    def aTob(a: Int): Int = a * 5
    
    aTob(a)
    

    错误:(5,73)类型不匹配;

    发现:AnyVal

    必填项:Int

    但以下作品:

    val a: Any = 5
    
    def aTob(a: Int): Int = a * 5
    
    aTob(a.asInstanceOf[Int])
    

    我不想显式地施法,但应该是隐式施法。

    [编辑:]我也试过 Any

    -

    更新:

    def getValue(dType: String): Any = {
    
        dType.toLowerCase() match {
    
            case "double[3]" =>
                10d
            case "float" =>
                1f
    
    }
    
    val d = getValue("double[3]")
    val f = getValue("float")
    
    SomeClass(d, f)
    
    
    case class SomeClass(val d : Double, val f: Float)
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Duelist    7 年前

    你可以使用隐式转换,但它很容易出错,因为如果你通过了。 Float 喜欢 val a: AnyVal = 5.0F 你会得到 ClassCastException :

    implicit def anyValToInt(anyVal: AnyVal): Int = anyVal.asInstanceOf[Int]
    
    val a: AnyVal = 5
    
    def aTob(a: Int): Int = a * 5
    
    aTob(a)
    
    推荐文章