Scala:避免冗余类型参数

Scala:避免冗余类型参数,scala,type-parameter,Scala,Type Parameter,假设我有一个抽象类栏,它接受一个类型参数: abstract class Bar[A] { def get: A } 我有一个函数,它想实例化一些Bar对象,调用它们的get方法并返回结果: def foo[A, B <: Bar[A]]: Seq[A] 但这并不能编译。有没有办法让foo更简洁?丹尼尔在评论中说的话 也许使用抽象类型成员将有助于减少冗长 abstract class Bar { type A def get: A } def foo[B <:

假设我有一个抽象类栏,它接受一个类型参数:

abstract class Bar[A] { def get: A } 
我有一个函数,它想实例化一些
Bar
对象,调用它们的
get
方法并返回结果:

def foo[A, B <: Bar[A]]: Seq[A]

但这并不能编译。有没有办法让foo更简洁?

丹尼尔在评论中说的话

也许使用抽象类型成员将有助于减少冗长

abstract class Bar { 
  type A
  def get: A 
} 

def foo[B <: Bar]: Seq[B#A]
def baz[B <: Bar](b: B): Seq[B#A]
def taz[B <: Bar](b: B): Seq[b.A]
抽象类条{
A型
def get:A
} 

def foo[B不仅它不是“隐式的”,该声明甚至无助于推断
A
。我所说的“非隐式”是指您可以编写
[B我想您可以定义一种告诉编译器“这是一个类型参数”的方法,类似
def foo[B那很酷。在这种特殊情况下,它不适合我,因为我使用反射来实例化对象,但学习一些新语法总是很好的。@KenjiMatsuoka,抽象类型成员的语义与类型参数有些不同。一般来说,它们是可互换的,但并不总是。
abstract class Bar { 
  type A
  def get: A 
} 

def foo[B <: Bar]: Seq[B#A]
def baz[B <: Bar](b: B): Seq[B#A]
def taz[B <: Bar](b: B): Seq[b.A]