java构造函数无法转换为scala
我知道java构造函数可以转换成Scala代码。但这是我的项目通用类实现。我在这个项目中使用了hibernate、spring,我创建了genericDAO trait,但无法创建它的实现,或者无法将这个java构造函数转换为scala 这是两个变量java构造函数无法转换为scala,java,scala,scala-java-interop,Java,Scala,Scala Java Interop,我知道java构造函数可以转换成Scala代码。但这是我的项目通用类实现。我在这个项目中使用了hibernate、spring,我创建了genericDAO trait,但无法创建它的实现,或者无法将这个java构造函数转换为scala 这是两个变量 private Class<T> entityClass; private String entityClassName; 私有类entityClass; 私有字符串entityClassName; 这是GenericDAOImp
private Class<T> entityClass;
private String entityClassName;
私有类entityClass;
私有字符串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(“未选中”)
公共通用DAOImpl(){
类型genericSuperclass;
类ParameterizedClass=getClass();
做{
genericSuperclass=ParameterizedClass.getGenericSuperclass();
if(类的genericSuperclass实例){
ParameterizedClass=(类)genericSuperclass;
}
}while(genericSuperclass!=null
&&!(参数化类型的genericSuperclass实例));
this.entityClass=(类)((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
@SuppressWarnings(“未选中”)
定义此(T,ID){
var genericSuperclass:Type;
var参数化类:类[?]=getClass
做{
genericSuperclass=ParameterizedClass.getGenericSuperclass()
if(genericSuperclass实例[Class]){
ParameterizedClass=(类)genericSuperclass
}
}while(genericSuperclass!=null
&&!([ParameterizedType]的genericSuperclass实例)
this.entityClass=(类[T])((参数化类型)genericSuperclass)
.getActualTypeArguments()[0]
if(entityClass!=null){
entityClassName=entityClass.getSimpleName()
}
}
这是一个编译错误
我发现Java到Scala的转换存在一些问题。具体地说,我将用
isInstanceOf[SomeClass]
演员阵容由
(Class[T])
到
将类绑定的?
更改添加到。
(我想)
数组索引从方括号更改为圆括号,例如
.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
但是。。。这对我来说毫无意义,我需要更多地了解你原来的课程才能让它发挥作用。到目前为止,你得到了什么/尝试了什么?@milano:在处理反思或其他复杂的事情之前,你应该先研究一下scala。您的“已尝试”代码与有效的scala代码相差甚远。@milano:
s\Class[?]\Class[\u]\
,s\instanceof[Class]\
,s\(Class)genericSuperclass\genericSuperclass。如果[Class[\u]\
,s\[0]\[0]\
,请删除def this(T,ID){/code>(类主体是构造函数),没有要执行此操作{…}在scala中
时,你应该初始化甚至var
s.@milano:类GenericDAOImpl[T,ID]
@milano-试着自己解决这个问题。查一查,想一想。此刻,senia只是在重写你的代码,你没有学到任何东西。
.getActualTypeArguments(0)
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