Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/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 检查反射类型是基元类型还是对象类型_Java_Reflection_Primitive Types_Generic Programming - Fatal编程技术网

Java 检查反射类型是基元类型还是对象类型

Java 检查反射类型是基元类型还是对象类型,java,reflection,primitive-types,generic-programming,Java,Reflection,Primitive Types,Generic Programming,我使用下面的代码来查找反射中的类成员,这些成员是基元和一些对象,我的问题是有一种方法可以识别字段是否是类型基元、对象、类引用,因为我想根据类型调用特定的方法。 例如,if field is primitive调用handlePrimitive if field type其他类型引用(在下面的示例中为SalesOrderItemPK primaryKey;)调用handleClassReference方法等 只是为了理解,我需要获取类并对其进行Invisigate,然后根据成员类型创建数据 for

我使用下面的代码来查找反射中的类成员,这些成员是基元和一些对象,我的问题是有一种方法可以识别字段是否是类型基元、对象、类引用,因为我想根据类型调用特定的方法。 例如,if field is primitive调用handlePrimitive if field type其他类型引用(在下面的示例中为SalesOrderItemPK primaryKey;)调用handleClassReference方法等

只是为了理解,我需要获取类并对其进行Invisigate,然后根据成员类型创建数据

for (Object clsObj : listClsObj) {
        Field[] declaredFields = clsObj.getClass().getDeclaredFields();
        numOfEntries = 1;
        do {
            Object newInstance = clsObj.getClass().newInstance();

            for (Field field : declaredFields) {

                // Get member name & types

                Class<?> fieldType = field.getType();
                Type genericType = field.getGenericType();
                String fieldTypeName = fieldType.getName();
                String memberName = field.getName();


                if (genericType instanceof ParameterizedType) {
                    ParameterizedType pt = (ParameterizedType) genericType;
                    for (Type typeOfReferance : pt.getActualTypeArguments()) {

                        String classTypeName = typeOfReferance.toString();
                        String[] parts = classTypeName.split(" ");
                        memberReferance = parts[1];

如果您不调用
.toString()
,而是将
类型
强制转换为
,您将得到
.isPrimitive()

,顺便说一句,当类中有成员键入其他类时,代码将输入此行,例如:private List jobList=new ArrayList();例如,我在这段代码中发现int类型是否是基元类型,但我如何知道string类型是哪种类型呢?我没有得到这个问题,我想我可以做
field.getType().isPrimitive()
,而不必对Java 1.6中的
Class
进行额外的转换。
public static SwitchInputType<?> switchInput(final String typeName, final String memberName, final int cnt) {
    if (typeName.equals("java.lang.String")) {
        return new SwitchInputType<String>(new String(memberName + " " + cnt));
    } else if (typeName.equals("char")) {
        return new SwitchInputType<Character>(new Character('a'));
@Entity
public class SalesOrderItem 
{
    @EmbeddedId
    SalesOrderItemPK primaryKey; 
    private String ProductId;
    private String Notes;