object Test {
implicit def x = List(1, 2)
trait A[T] {
def res(): Int = 0
def makeResPlusOne(): Int = res() + 1 // All right
}
trait B[T] extends A[T] {
def res()(implicit y: List[T]) = y.size
}
class AA extends A[Int]
class BB extends B[Int]
}
val x: Test.A[Int] = new Test.BB
x.res() // Outputs 0 instead of 2.
object Test {
implicit def x = List(1, 2)
trait A[T] {
def res()(implicit y: List[T]): Int = 0 // Added the implicit keyword.
def makeResPlusOne(): Int = res() + 1 // Fails to compile.
}
trait B[T] extends A[T] {
override def res()(implicit y: List[T]) = y.size
}
class AA extends A[Int]
class BB extends B[Int]
}
val x: Test.A[Int] = new Test.BB
x.res() // Error
error: could not find implicit value for parameter y: List[Int]
编辑
如果我导入一个隐式的。但是,我有MakeresplusOne()
方法,它在第二种情况下触发错误,但在第一种情况下不触发。请告诉我如何正确定义这个方法,它通常在编译时不需要隐式。_
error: could not find implicit value for parameter y: List[T]
def makeResPlusOne(): Int = res() + 1
^
你很亲密:
object Test {
implicit def list = List(1, 2)
trait A[T] {
def res()(implicit y: List[T]): Int = 0 // Added the implicit keyword.
}
trait B[T] extends A[T] {
override def res()(implicit y: List[T]) = y.size
}
class AA extends A[Int]
class BB extends B[Int]
}
import Test.list
val x: Test.A[Int] = new Test.BB
x.res() // Works!
您忘记导入隐式列表。请注意,我已经重命名了隐式,以避免在导入变量x
时发生冲突。
编辑:
object Test {
implicit def xx = List(1, 2)
trait A[T] {
def res()(implicit y: List[T]): Int = 0
def makeResPlusOne()(implicit y: List[T]): Int = res() + 1 // Works now.
}
trait B[T] extends A[T] {
override def res()(implicit y: List[T]) = y.size
}
class AA extends A[Int]
class BB extends B[Int]
}
import Test.xx // import the implicit list
val x: Test.A[Int] = new Test.BB
x.res() // Works
这怎么可能呢?为什么添加另一个参数会导致方法解析不明确?为什么在第一个例子中它可以区分供应商和对象,而在第二个例子中却不能? 编辑:这使用的是1.8.0_121。这是完整的错误消息:
问题内容: 我注意到使用泛型和lambda重载方法的行为很奇怪。这个课程效果很好: 没有模棱两可的方法调用。但是,将其更改为此将使第二个调用不明确: 怎么会这样?为什么添加另一个参数会导致方法解析不明确?为什么在第一个示例中却能分辨出Supplier和Object之间的区别,而在第二个示例中却不能呢? 编辑:这是使用1.8.0_121。这是完整的错误消息: 问题答案: 如果我对JSE for Ja
我有一个返回泛型的函数: 所以,当我试图匹配一个函数结果时,我的问题是: 我得到一个警告:“类型模式数组[CustomerInfo到[CustomerApplication到]]中的非变量类型参数CustomerApplication-DDTO未选中,因为它已被擦除消除。” 这是否意味着在Array[]中可以得到任何类型的数组?所以我已经阅读了关于ClassTag和TypeTag的文章,但是误解了
问题内容: 我正在尝试使用scala json库Circe,将其包装在一个简单的特征中以提供往返于json的转换,我对此具有以下要求: 这样做的目的是简单地能够用任何对象调用JsonConverter并将其转换成json之类的东西,但是当我尝试对其进行编译时,我得到以下信息: 我当然可以拥有一个类,打算通过转换器放入的所有内容都继承自该类,但是我有一个印象,大约可以自动生成编码器/解码器? 问题答
为什么我有这个错误? 错误:(5,18)对重载定义的引用不明确,类型为(x$1:String)布尔的类String中的方法startsWith和类型为(x$1:String,x$2:Int)布尔的类String中的方法startsWith匹配预期的类型?水果过滤器(_.startswith==“AP”) 水果过滤器(_.startswith==“AP”)
提示:它应该看起来像隐式的[固体](... 太感谢你了!