2

このJavaコードをScalaに変換しようとしていますが、失敗します。

Java(エラーなしでコンパイルされます):

Validation.byProvider(HibernateValidator.class).configure().
    buildValidatorFactory().getValidator().unwrap(MethodValidator.class);

スカラ:

Validation.byProvider(classOf[HibernateValidator]).configure.
    buildValidatorFactory.getValidator.unwrap( classOf[MethodValidator] )

Scalaエラー:

inferred type arguments [Nothing,org.hibernate.validator.HibernateValidator] do 
  not conform to method byProvider's type parameter bounds [T <: 
  javax.validation.Configuration[T],U <: 
  javax.validation.spi.ValidationProvider[T]]

私は何が間違っているのですか?

私はScala2.10を使用しており、クラスパスにJBoss7.1.0があります。

4

1 に答える 1

0

Scalaはいくつかのタイプを推測するのに少し問題があるようです。これは機能するはずです:

Validation.byProvider[HibernateValidatorConfiguration, HibernateValidator](classOf[HibernateValidator])
   .configure.buildValidatorFactory.getValidator.unwrap(classOf[MethodValidator])

byProviderのソースを見ると、次のことがわかります。

public static <T extends javax.validation.Configuration<T>, 
    U extends javax.validation.spi.ValidationProvider<T>>  
    javax.validation.bootstrap.ProviderSpecificBootstrap<T> 
    byProvider(java.lang.Class<U> providerType)

したがって、scalaは、HibernateValidatorにHibernateValidatorConfigurationが実装されていることを認識しますが、そうではありません。

于 2013-01-06T01:42:25.027 に答える