1

たとえば、私はこれを持っています:

abstract class Vehicle

class Car extends Vehicle

そして、Java クラスを返すが、Vehicle タイプのクラスのみに制限されるメソッドを作成したいと考えています。

object CarDealer {
  def getVehicularClass: Class[Vehicle] = classOf[Car]
}

次のさまざまなアプローチを機能させることができません。

  1. 私が通常これに対処する方法

    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]
    
  2. 抽象型の使用

    type V <: Vehicle
    
  3. 暗黙的なマニフェストを使用する (メソッドの引数のみを制限し、値を返さないようです)

誰でも助けることができますか?

ありがとう!

4

3 に答える 3

1

Vehicleスーパータイプです。の一部のサブタイプAVehicleが含まれるCarことがわからないため、そのように一般的に記述することはできません。誰かが を求めたらどうしBusますか? 助けにはCarDealerなりませんが、型シグネチャは、あなたが求めるものに対してそれを機能させることができると約束しています。 A <: Vehicle

車両の実際のタイプを保存することに関心がない場合は、次のように記述してください。

object CarDealer {
  def getVehicularClass: Class[Vehicle] = classOf[Car]
}

別の方法として、一部のインターフェイスを従わせたい場合は、必要なものをインターフェイスで指定します。

trait VehicleClass[A <: Vehicle] {
  def getVehicularClass: Class[A]
}

次に、オブジェクトが返すことを約束している車両のサブクラスを状態にします。

object CarDealer extends VehicleClass[Car] {
  def getVehicularClass = classOf[Car]
}

そして今、すべての約束が明記され、守られています。

于 2011-07-26T23:00:19.653 に答える
0

この制約は、実存的なタイプで適切に表現されます。

object CarDealer {
  def getVehicularClass: Class[_ <: Vehicle] = classOf[Car]
}

もちろん、実存的なタイプを不適切にする他の要件があるかもしれませんが、あなたの問題は特によく述べられていません。

于 2011-07-27T22:07:44.220 に答える
0

Class[T]は type で不変Tです。したがってA extends BclassOf[A]が のサブタイプでない場合でもclassOf[B]。したがって、あなたの問題に対する正確な解決策はありません...

于 2011-07-27T05:40:55.820 に答える