检查反射中类型是原始类型还是对象类型

4
我正在使用以下代码在反射中查找原始类型和一些对象的类成员,我的问题是是否有一种方法可以确定字段的类型是原始类型、对象、类引用,因为我想根据类型调用特定的方法。例如,如果字段是原始类型,则调用handlePrimitive方法;如果字段类型是其他类型引用(在下面的示例中为SalesOrderItemPK primaryKey;),则调用handleClassReferance等方法。
仅供理解,我需要获取类并进行调查,根据成员类型创建数据...
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];

我希望调用特定的方法,该方法可以根据数据类型处理字段。

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'));

示例的类应该像这样,我需要知道primaryKey键以创建一个对象。
@Entity
public class SalesOrderItem 
{
    @EmbeddedId
    SalesOrderItemPK primaryKey; 
    private String ProductId;
    private String Notes;
1个回答

17
如果你没有调用 .toString(),而是将 Type 强制转换为 Class,则会得到 .isPrimitive()

顺便说一下,当我们在类类型中有成员时,例如:private List<Job> jobList = new ArrayList<Job>();,代码将输入到这些行中。 - John Jerrby
我发现使用这段代码可以判断int类型是否为原始类型,但是对于string类型,我应该如何知道它是哪种类型? - John Jerrby
1
我没有听懂那个问题。 - Bozho
2
我认为在Java 1.6中,我可以执行field.getType().isPrimitive()而无需进行额外的Class转换。 - Timo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接