Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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 如何从可能为空的PersistentSet中获取元素类型_Java_Grails_Groovy - Fatal编程技术网

Java 如何从可能为空的PersistentSet中获取元素类型

Java 如何从可能为空的PersistentSet中获取元素类型,java,grails,groovy,Java,Grails,Groovy,好吧,问题本身就解释了,下面是我如何尝试的。我认为问题可能是集合是空的,这些方法至少需要一个元素来返回类 视图/产品/_form.gsp <% cl = UnidadProductiva.get(params.unidadProductiva?.id).producto %> <p>${cl}</p> 我需要一个返回CaldoMadre的方法或属性 这就是我正在使用的类 class UnidadProductiva {...} class Cocimien

好吧,问题本身就解释了,下面是我如何尝试的。我认为问题可能是集合是空的,这些方法至少需要一个元素来返回类

视图/产品/_form.gsp

<% cl = UnidadProductiva.get(params.unidadProductiva?.id).producto %>
<p>${cl}</p>
我需要一个返回CaldoMadre的方法或属性

这就是我正在使用的类

class UnidadProductiva {...}

class Cocimiento extends UnidadProductiva {
    static hasMany = [producto:CaldoMadre];
}

class Producto {
    static belongsTo = [unidadProductiva:UnidadProductiva]
}

class CaldoMadre extends Producto {...}

我是智利的grails noob,如果我不明白,请耐心等待。

我可以让这个在一个Cocimento上工作,但不能在UnidadProductiva上工作,因为UnidadProductiva中没有声明的field producto。在gsp中使用有点尴尬,但也许你可以在控制器中使用,并将其传递出去:

//in controller
import java.lang.reflect.*

//in show action or whichever makes sense
Field field = Cocimiento.class.getDeclaredField("producto");
ParameterizedType pt = (ParameterizedType) field.getGenericType();
Type concreteType = pt.getActualTypeArguments()[0];
println concreteType.getName()
将使用我的软件包设置打印com.CaldoMadre


而且它不依赖于集合中的任何东西

我不清楚CandidateClass在这里是什么意思。你能澄清一下吗?另外,你从尝试中得到的结果可能会对问题有所帮助。谢谢,我编辑的问题看起来像是@AaronKurtzhals的复制品,如果我错了,请纠正我,但是该帖子的解决方案,应用于我的问题的是,当您使用pt.getActualTypeArguments[0]时,向cocimento添加一个参数,如'String productClass=CaldoMadre';,如果第一个元素的类型正确,问题是它的开头是空的。一个可能的解决方案是向cocimento添加一个参数,如'String productClass=CaldoMadre',但这是最糟糕的方法。否-它不获取第一个元素的类型。测试时,我没有实例化任何实际的域对象。注意,我没有使用cocimento.getid。hasMany的结果是Set=newhashset。因此,pt.getActualTypeArguments[0]正在获取泛型类型的第一个参数-在本例中。如果您有类似HashMap的东西,那么pt.getActualTypeArguments[0]将是CaldoMadre,而pt.getActualTypeArguments[1]将是整数。谢谢,这正是我所需要的
//in controller
import java.lang.reflect.*

//in show action or whichever makes sense
Field field = Cocimiento.class.getDeclaredField("producto");
ParameterizedType pt = (ParameterizedType) field.getGenericType();
Type concreteType = pt.getActualTypeArguments()[0];
println concreteType.getName()