-
360 votesanswersviews
如何在Scala上绕过类型擦除?或者,为什么我不能获得我的集合的类型参数?
Scala生活中的一个可悲事实是,如果你实例化一个List [Int],你可以验证你的实例是一个List,你可以验证它的任何单个元素是一个Int,但不是它是一个List [ Int],可以很容易地验证: scala> List(1,2,3) match { | case l : List[String] => println("A list of strings?!... -
14 votesanswersviews
在Scala中,为什么不为类型参数发出未经检查的警告?
我一般都了解什么类型的擦除以及为什么我们会遇到未经检查的警告 . 但是,我不明白为什么在以下情况下只发出一个未经检查的警告: class A[K] { def receive: PartialFunction[Any, Unit] = { case ds: List[Double] => // unchecked warning println("* Li... -
4 votesanswersviews
如何解决此Scala函数参数类型擦除错误?
我正在创建一个map-reduce框架,现在我正在尝试创建一个构建器类来实例化处理管道 . 此构建器需要包含用户指定的函数列表,因此稍后它可以使用这些函数作为参数来构造管道来实例化Worker对象 . 我正在使用案例类来创建函数“持有者”,也用于“ Worker ” . 我的问题是,当我继续分析持有者时,如果我对它们进行模式匹配,则由于类型擦除,函数中的类型信息似乎丢失了 . 这里有一些最小的代码... -
12 votesanswersviews
具有泛型重载的Java擦除(不覆盖)
我的域名中有FinanceRequests和CommisionTransactions . 如果我有一个FinanceRequests列表,每个FinanceRequest可能包含多个需要回收的CommisionTransactions . 不要担心这是怎么做到的 . 下面的课程(非常底层)让我觉得自己的模糊和温暖,因为它很好地重用现有的代码 . 一个问题类型擦除 . public void cl... -
353 votesanswersviews
如何在Scala上绕过类型擦除?或者,为什么我不能获得我的集合的类型参数?
Scala生活中的一个可悲事实是,如果你实例化一个List [Int],你可以验证你的实例是一个List,你可以验证它的任何单个元素是一个Int,但不是它是一个List [ Int],可以很容易地验证: scala> List(1,2,3) match { | case l : List[String] => println("A list of strings?!... -
5 votesanswersviews
Scala:重载(Seq [T])和(T *)
我有一个案例类,以Seq [T]为参数: case class MyClass(value: Seq[T]) 我现在想要写 MyClass(t1,t2,t3) 所以我定义了 object MyClass { def apply(value: T*) = new MyClass(value.toSeq) } 它不起作用,因为案例类定义 object MyClass { def ... -
39 votesanswersviews
scala中的擦除消除:非变量类型参数未被选中,因为它通过擦除被消除
我有一个序列Seq [Any],其中包含各种对象(如String,Integer,List [String]等) . 我正在尝试筛选列表并将其分解为基于类类型分区的单独列表 . 以下是我在代码中使用的模式: val allApis = mySequence.filter(_.isInstanceOf[String]) 这很好用,不会产生任何警告 . 但是,当我尝试过滤掉作为字符串列表的对象时: ... -
26 votesanswersviews
如何在Scala中对泛型类型进行模式匹配?
假设我们有一个泛型类 Container : case class Container[+A](value: A) 然后,我们想要将 Container 与 Double 和 Container Any 进行模式匹配: val double = Container(3.3) var container: Container[Any] = double 为此,我们通常会写: contai... -
2 votesanswersviews
模式匹配在scala中的通用抽象类型
我有一个自递归类型: trait Problem[P <: Problem[P]] { type Solution } 现在,我想在 P#Solution 上进行模式匹配 . 设's assume we'在 case class Foo[P <: Problem[P]]() 内: case ExampleCaseClass(s: P#Solution) if conditionA... -
6 votesanswersviews
在模式匹配中绕过类型擦除
我试图在模式匹配中解决类型擦除问题 . 假设: import java.io._ trait Serializer[V] { def save(os: OutputStream, v: V): Unit def load(in: InputStream): V } trait HasSerializer[V] { def serializer: Serializer[V] } 如何在... -
1 votesanswersviews
Scala模式匹配类型参数
我想摆脱这个示例代码的类型擦除警告: val a: Seq[Any] = Seq(1) a match { case b: Seq[Int] => b.map(c => println(2 * c) ) case _ => println("Not matched") } 它编译并正常工作,但有一个警告: 警告:(31,13)类型模式中的非变量类型... -
2 votesanswersviews
如何将模式匹配与参数化特征结合使用?
我在Scala特性和类型擦除方面遇到了麻烦 . 我有这个特点: trait Meta[T] { def ~=(e: T): Boolean } 现在我想使用模式匹配来检查这种情况: (m,i) match { case (x:Meta[T], y: T) if x ~= y => println ("right") case _ => println (&qu... -
0 votesanswersviews
如何在不使用依赖类型的情况下进行模式匹配?
这很难说,所以请让我举个例子: trait Cache trait QueryLike { type Result } trait Query[A] extends QueryLike { type Result = A def exec: Result } trait CachedQuery[A] extends QueryLike { type Result = A ... -
2 votesanswersviews
方法(意外地)具有与另一种方法相同的擦除
我读了关于这个的所有其他问题,但我不明白为什么在我的情况下有类型擦除 . 我有 public <T extends Aclass&Binterface> boolean test(final T param) { ... } public boolean test(final Aclass pOtherPPShape) { ... } 方法测试(Aclass... -
214 votesanswersviews
Java泛型类型擦除:何时以及发生了什么?
我读到了Java的类型擦除on Oracle's website . When does type erasure occur? 在编译时或运行时?当 class 加载?当类被实例化时? 很多站点(包括上面提到的官方教程)都说在编译时会发生类型擦除 . 如果在编译时完全删除了类型信息,那么当调用使用泛型的方法而没有类型信息或错误的类型信息时,JDK如何检查类型兼容性? 请考虑以下示例:Say cl... -
7 votesanswersviews
Scala模式与清单匹配
This great daily Scala article描述了如何克服匹配中的类型擦除 . 我正在尝试应用该技术来转换参数化类型的IndexesSeq,但匹配失败 . 为什么会这样,我该如何解决? object Example extends App{ class TableColumn[T]( val values: IndexedSeq[T], v... -
214 votesanswersviews
Java泛型类型擦除:何时以及发生了什么?
我读到了Java的类型擦除on Oracle's website . When does type erasure occur? 在编译时或运行时?什么时候上课?当类被实例化时? 很多站点(包括上面提到的官方教程)都说在编译时会发生类型擦除 . 如果在编译时完全删除了类型信息,那么当调用使用泛型的方法而没有类型信息或错误的类型信息时,JDK如何检查类型兼容性? 请考虑以下示例:Say class ... -
4 votesanswersviews
带有泛型返回类型的lambda构造函数的Kotlin NDArray
我正在尝试在Kotlin中创建一个非常简单的通用NDArray类,它将lambda表达式作为init函数 . class NDArray<T>(i: Int, j: Int, f: (Int) -> T) { val values: Array<T> = Array(i * j, f) } 典型用法是: fun main(args: Array<St... -
10 votesanswersviews
Scala:数组和类型擦除
我想编写重载函数如下: case class A[T](t: T) def f[T](t: T) = println("normal type") def f[T](a: A[T]) = println("A type") 结果如我所料: f(5)=>正常类型f(A(5))=> A类型 到现在为止还挺好 . 但问题是同样的事情不适用于数组:... -
1 votesanswersviews
为什么DummyImplicit不会消除[String](a:A)(a:String)的歧义
鉴于以下代码: final case class Attr[A](name: String)(implicit conv: String To A) { def apply(value: A)(implicit dummy: DummyImplicit) = Attribute(name, value) def apply(value: String) = Attribute[A](nam... -
2 votesanswersviews
在Scala中,所有抽象类型在擦除后都具有相同的类型
以下代码无法编译,因为两个乘法运算符 have same type after erasure : (f: Object)Object 我知道类型擦除,但我看到的所有情况都删除了 generic 类型,如 List[Int] 或 List[String] ,如Scala double definition (2 methods have the same type erasure)中所述 . 如何... -
14 votesanswersviews
Scala:抽象类型模式A未被选中,因为它被擦除消除了
我正在编写可以捕获特定类型的异常的函数 . def myFunc[A <: Exception]() { try { println("Hello world") // or something else } catch { case a: A => // warning: abstract type pattern ... -
1 votesanswersviews
Scala警告:抽象类型模式Z未被选中,因为它是通过擦除消除的
我已经看了一下关于这个主题的答案,但我还没有解决这个问题的解决方法: object MyObj { def validate[Z](json: JsValue)(implicit rds: Reads[Z]): Either[Error,Z] = { json.validate[Z].map{ case r: Z => Right(r) // Type Eras... -
2 votesanswersviews
因为擦除而被删除,所以不加以控制
我正在为我的 Akka 演员编写测试,其中我的演员用 Seq[Id] 回应(而 Id 是我的 case class ) . 我做 val generator = TestActorRef[IdGenerator] val batchSize: Int = 10 within(10.millis) { generator ! GetIdentifiers(batchSize) expec... -
8 votesanswersviews
C使用lambdas对函数模板进行类型擦除
我正在尝试键入擦除一个对象并遇到一个问题,我希望有人在这里可能有专业知识 . 我没有遇到任何类型的问题 - 擦除任意非模板化函数;到目前为止,我一直在做的是创建一个自定义的 static "virtual table" -esque函数指针集合 . 这都是使用非捕获lambda进行管理的,因为它们会衰减为自由函数指针: template<typename Value, ... -
1 votesanswersviews
Java类型擦除和数组
oracle doc说Generics是使用技术调用类型擦除在java中实现的,这就是它的工作原理 . 如果类型参数是无界的,则用泛化或对象替换泛型类型中的所有类型参数 . 因此,生成的字节码仅包含普通的类,接口和方法 . 如有必要,插入类型转换以保持类型安全 . 生成桥接方法以保留扩展泛型类型中的多态性 . 所以,如果我有一个Generic类,请说Container如下: cla... -
0 votesanswersviews
Type Erasure如何在java中工作?
我在http://download.oracle.com/javase/tutorial/java/generics/erasure.html处理了TypeErasure主题,该主题说编译器会删除与类参数相关的所有信息,并在类或方法中输入类型参数 . 现在考虑下面的代码 public class Box<T> { private T t; // lineA, T stands ... -
3 votesanswersviews
java泛型类型擦除
声明类型参数为 <T extends A & B & C> 的类时,类型擦除过程将使用类型 A 替换 T . 但是如果 T 类型的变量调用在接口 B 或 C 中声明的方法,Java会用它做什么? 当我们创建一个泛型类型的实例,如 ArrayList<String> 时,类型参数 String 也将被删除,但调用 get 方法将返回类型 String ,这些... -
12 votesanswersviews
Java类型擦除擦除我的泛型类型?
我认为java擦除会在编译时擦除泛型类型,但是当我自己测试它时,我意识到在Bytecode中有一些关于泛型类型的信息 . 这是我的测试: 我写了2节课: import java.util.*; public class Test { List integerList; } 和 import java.util.*; public class Test { List<Inte...