编写一个方法来返回在Scala中被约束为特定类型的java类
例如,我有:编写一个方法来返回在Scala中被约束为特定类型的java类,scala,types,parameterized,Scala,Types,Parameterized,例如,我有: abstract class Vehicle class Car extends Vehicle 我想写一个方法,返回一个java类,但只限于Vehicle类型的类 object CarDealer { def getVehicularClass: Class[Vehicle] = classOf[Car] } 我无法获得以下不同的工作方法: 我通常处理这件事的方式 object CarDealer { def getVehicularClass[A <: Ve
abstract class Vehicle
class Car extends Vehicle
我想写一个方法,返回一个java类,但只限于Vehicle类型的类
object CarDealer {
def getVehicularClass: Class[Vehicle] = classOf[Car]
}
我无法获得以下不同的工作方法:
object CarDealer {
def getVehicularClass[A <: Vehicle]: Class[A] = classOf[Car]
}
[error] found : java.lang.Class[Car](classOf[Car])
[error] required: Class[A]
[error] def getVehicularClass[A <: Vehicle]: Class[A] = classOf[Car]
objectcardealer{
def GetVehiclarClass[AVehicle
是超类型。你不知道Vehicle
的某些子类型A
将包括Car
,因此你不能一般地这样写。如果有人要一辆Bus
,CarDealer
帮不上忙,但类型签名保证它可以在一个月内工作纽约AVehicle
是超类型。你不知道Vehicle
的某些子类型A
将包括Car
,所以你不能一般地这样写。如果有人要总线
,怎么办?CarDealer
帮不上忙,但类型签名保证它可以做到这一点对于任何A类型Class[T]
在类型T
中是不变的。因此,即使A扩展了B
,classOf[A]
也不是classOf[B]
的子类型。因此,您的问题没有确切的解决方案……类型Class[T]
在类型T
中是不变的。因此,即使A扩展了B
,classOf[A]
不是classOf[B]
的子类型。因此,您的问题没有确切的解决方案…这个约束用存在类型充分表达:
object CarDealer {
def getVehicularClass: Class[_ <: Vehicle] = classOf[Car]
}
objectcardealer{
def GetVehiclarClass:Class[此约束用存在类型充分表示:
object CarDealer {
def getVehicularClass: Class[_ <: Vehicle] = classOf[Car]
}
objectcardealer{
def GetVehiclarClass:Class[您的第一个解决方案未编译…第二部分正常。您的第一个解决方案未编译…第二部分正常。
trait VehicleClass[A <: Vehicle] {
def getVehicularClass: Class[A]
}
object CarDealer extends VehicleClass[Car] {
def getVehicularClass = classOf[Car]
}
object CarDealer {
def getVehicularClass: Class[_ <: Vehicle] = classOf[Car]
}