加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在Scala中导入没有路径依赖的内部类?

发布时间:2020-12-16 09:56:36 所属栏目:安全 来源:网络整理
导读:TL DR:是否可以(本地?)禁用路径依赖类型?我想发出一个类似于import x._的单一import语句,但要使C引用X#C而不是x.C(X是x的类型)? 我有一堆类型: class Button[M] { ... }class Label[M] { ... }... 我碰巧使用它们将相同类型的参数传递给所有这些: clas
TL& DR:是否可以(本地?)禁用路径依赖类型?我想发出一个类似于import x._的单一import语句,但要使C引用X#C而不是x.C(X是x的类型)?

我有一堆类型:

class Button[M] { ... }
class Label[M] { ... }
...

我碰巧使用它们将相同类型的参数传递给所有这些:

class UseSite[M] (
   btn1 : Button[M],btn2 : Button[M],lbl1 : Label[M]) {
  ...
}

我认为包装所有这些类型是很好的,所以我只需要传递一次类型参数:

class Swing[M] {
  class Button { ... }
  class Label { ...}
}

然后在使用网站上我希望能够这样做:

class WithSwing[M] {
  val swing = new Swing[M]
  import swing._
  class UseSite(
     btn1 : Button,btn2 : Button,lbl1 : Label) {
    ...
  }
}

但是,由于路径依赖类型,这不能正常工作:Button指的是swing.Button而不是Swing [M] #Button,因此外部代码很难将正确的参数传递给UseSite构造函数.

有没有一种很好的方法让Button引用Swing [M] #Button而不是swing.Button?

解决方法

假设路径依赖性确实是偶然的,那么你可以尝试这样的事情,而不是在代码库中追逐类型预测.

class Button[M]
class Label[M]

trait Swing[M] {
  type ButtonM = Button[M]
  type LabelM = Label[M]
}

class WithSwing[M] {
  val swing = new Swing[M] {}
  import swing._
  class UseSite(btn1 : ButtonM,btn2 : ButtonM,lbl1 : LabelM)
}

外面WithSwing使用看起来像,

val ws = new WithSwing[String]
import ws.swing._
new ws.UseSite(new ButtonM {},new ButtonM {},new LabelM {})

继承在某种程度上增加了简洁性

class WithSwing[M] extends Swing[M] {
  class UseSite(btn1 : ButtonM,lbl1 : LabelM)
}

// Usage ...
val ws = new WithSwing[String]
import ws._
new ws.UseSite(new ButtonM {},new LabelM {})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读