2

我正在尝试将此 Java 代码转换为 Scala,但我失败了:

Java(编译没有错误):

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

斯卡拉:

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

斯卡拉错误:

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]]

我究竟做错了什么?

我正在使用 Scala 2.10 并在类路径上有 JBoss 7.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 回答