我知道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
答案 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
但......对我来说没有意义,我需要看到更多原始课程才能让它发挥作用。