编写一个方法来返回在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[A
    Vehicle
    是超类型。你不知道
    Vehicle
    的某些子类型
    A
    将包括
    Car
    ,因此你不能一般地这样写。如果有人要一辆
    Bus
    CarDealer
    帮不上忙,但类型签名保证它可以在一个月内工作纽约
    A
    Vehicle
    是超类型。你不知道
    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]
    }