Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java构造函数无法转换为scala_Java_Scala_Scala Java Interop - Fatal编程技术网

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

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

这是两个变量

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