java构造函数无法转换为scala

时间:2013-07-08 09:30:07

标签: java scala scala-java-interop

我知道java构造函数转换为Scala代码。但这是我的项目Generic类实现。我正在使用hibernate,Spring在这个项目中我创建了genericDAO trait但是无法创建它的实现或者我无法将这个java构造函数转换为scala

这是2个变量

private Class<T> entityClass;

private String entityClassName;

这是GenericDAOImpl类代码GenericDAOImpl是构造函数

@SuppressWarnings("unchecked")
        public GenericDAOImpl() {
            Type genericSuperclass;
            Class<?> parametrizedClass = getClass();
            do {
                genericSuperclass = parametrizedClass.getGenericSuperclass();
                if (genericSuperclass instanceof Class) {
                    parametrizedClass = (Class<?>) genericSuperclass;
                }
            } while (genericSuperclass != null
                    && !(genericSuperclass instanceof ParameterizedType));
            this.entityClass = (Class<T>) ((ParameterizedType) genericSuperclass)
                    .getActualTypeArguments()[0];
            if (entityClass != null) {
                entityClassName = entityClass.getSimpleName();
            }
        }

感谢米兰

修改

我试过这个

@SuppressWarnings("unchecked")
 def this(T,ID){
   var genericSuperclass:Type;
   var parametrizedClass:Class[?]=getClass
   do {
            genericSuperclass = parametrizedClass.getGenericSuperclass()
            if (genericSuperclass instanceof[Class]) {
                parametrizedClass = (Class<?>) genericSuperclass
            }
        } while (genericSuperclass != null
                && !(genericSuperclass instanceof [ParameterizedType]))
        this.entityClass = (Class[T]) ((ParameterizedType) genericSuperclass)
                .getActualTypeArguments()[0]
        if (entityClass != null) {
            entityClassName = entityClass.getSimpleName()
        }

 }


 And this got compilation Error 

1 个答案:

答案 0 :(得分:1)

我可以看到Java到Scala转换的一些问题。具体来说,我会用

替换Java的instanceof
isInstanceOf[SomeClass]

施放变更

(Class[T])

.asInstanceOf[Class[T]]

将类绑定?更改添加到_(我认为)

数组索引从方括号变为圆括号,例如

.getActualTypeArguments[0]

.getActualTypeArguments(0)

将这些更改应用于我获得的原始Java

class GenericDAOImpl[T] {
var genericSuperclass: Type = null
var parametrizedClass: Class[_] = getClass()
do {
    genericSuperclass = parametrizedClass.getGenericSuperclass()
    if (genericSuperclass.isInstanceOf[Class])
        parametrizedClass = genericSuperclass.asInstanceOf[Class[_]]
} while (genericSuperclass != null
                && !(genericSuperclass.isInstanceOf[ParameterizedType]))
val entityClass = genericSuperclass.asInstanceOf[ParameterizedType]
                .getActualTypeArguments()(0).asInstanceOf[Class[T]]
val entityClassName =
  if (entityClass != null) 
      entityClass.getSimpleName()
  else
      null

但......对我来说没有意义,我需要看到更多原始课程才能让它发挥作用。