0

我知道 java Constructor 转换成 Scala 代码。但这是我的项目通用类实现。我在这个项目中使用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 
4

1 回答 1

1

我可以看到 Java 到 Scala 转换的一些问题。具体来说,我会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

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

于 2013-09-16T08:04:43.750 回答