首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免类型擦除警告

避免类型擦除警告
EN

Stack Overflow用户
提问于 2013-11-05 20:23:33
回答 1查看 264关注 0票数 0

我有一些代码,其中有一个函数集合。每个函数可能有一个或两个参数。在迭代这些函数时,我检查元素是Function1类型还是Function2类型。问题是,我开始获得类型擦除警告,因为我必须定义参数数据类型才能进行编译(例如。Function2String,Int --参见警告below+示例)。

我了解到,当参数类型信息被编译时,Java会将其剥离掉,因此它不能与我定义的Function2模式匹配。问题是,我只想测试函数是Function1类型还是Function2类型,从那里我知道需要传递给函数的数据类型。我试过把他们定义为前任。Function2Any,Any和Function2Object,Object,但这两个都不禁止警告。是否有任何方法可以对不同参数计数的函数进行模式匹配而不要求它也检查参数类型?

代码语言:javascript
复制
[warn] /home/ubuntu/aa-2-0/src/main/scala/hw.scala:818: non-variable type argument Any in type Any => Any is unchecked since it is eliminated by erasure
[warn]                  else if(col_data.isInstanceOf[Function1[Any,Any]])  mapped_data+= col -> col_data.asInstanceOf[Function1[Any,String]].apply(page)
[warn]                                               ^
[warn] /home/ubuntu/aa-2-0/src/main/scala/hw.scala:819: non-variable type argument Any in type (Any, Any) => Any is unchecked since it is eliminated by erasure
[warn]                  else if(col_data.isInstanceOf[Function2[Any,Any,Any]]) mapped_data+= col -> col_data.asInstanceOf[Function2[Any,Any,String]].apply(result_row,page)

我知道有反射和标签类型等等,但这些似乎是丑陋和过于复杂的黑客来解决我相当琐碎的问题。相反,我计划将这些函数封装在FunctionOne、FunctionTwo案例类中,然后只对这些函数进行测试,但我想先看看是否有更优雅的解决方案需要学习。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 20:42:32

我不会列出不同函数类型的分类列表,这给您带来了这个问题。但是如果必须的话,可以使用通配符:

代码语言:javascript
复制
if(col_data.isInstanceOf[Function1[_,_]])

(您还可以使用含糖符号_ => _(_,_) => _等)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19798215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档