获取`int [] .class`的其他方法?

时间:2018-03-22 11:04:19

标签: java matlab reflection primitive-types

我想从Matlab获得int[].class。不幸的是,Matlab不允许这种语法。同时,我允许调用任何Java函数或按原样访问静态成员。

例如,我无法调用

int.class

但可以

java.lang.Integer.TYPE

是否可以以相同的方式在JDK API中找到int[].class

2 个答案:

答案 0 :(得分:3)

所以我在jshell中尝试了这个:

int[].class.getName()

那产生了:

[I

试图改变它:

Class.forName("[I")

这似乎解析了它:class [I

所以你可以试试Class.forName("[I")。这似乎工作得很好:

Class.forName("[I").isArray() // outputs true

答案 1 :(得分:1)

您可以使用Apache Commons包来实现目标。有意思的是,ClassUtils.getClass正是您所寻找的:

>> org.apache.commons.lang.ClassUtils.getClass('int[]')

 ans = 
       class [I

为了深入分析:

>> ans.get()

              Annotation: 0
             Annotations: [0×1 java.lang.annotation.Annotation[]]
          AnonymousClass: 0
                   Array: 1
           CanonicalName: 'int[]'
                   Class: [1×1 java.lang.Class]
             ClassLoader: []
                 Classes: [0×1 java.lang.Class[]]
           ComponentType: [1×1 java.lang.Class]
            Constructors: [0×1 java.lang.reflect.Constructor[]]
     DeclaredAnnotations: [0×1 java.lang.annotation.Annotation[]]
         DeclaredClasses: [0×1 java.lang.Class[]]
    DeclaredConstructors: [0×1 java.lang.reflect.Constructor[]]
          DeclaredFields: [0×1 java.lang.reflect.Field[]]
         DeclaredMethods: [0×1 java.lang.reflect.Method[]]
          DeclaringClass: []
          EnclosingClass: []
    EnclosingConstructor: []
         EnclosingMethod: []
                    Enum: 0
           EnumConstants: []
                  Fields: [0×1 java.lang.reflect.Field[]]
       GenericInterfaces: [2×1 java.lang.Class[]]
       GenericSuperclass: [1×1 java.lang.Class]
               Interface: 0
              Interfaces: [2×1 java.lang.Class[]]
              LocalClass: 0
             MemberClass: 0
                 Methods: [9×1 java.lang.reflect.Method[]]
               Modifiers: 1041
                    Name: '[I'
                 Package: []
               Primitive: 0
        ProtectionDomain: [1×1 java.security.ProtectionDomain]
                 Signers: []
              SimpleName: 'int[]'
              Superclass: [1×1 java.lang.Class]
               Synthetic: 0
          TypeParameters: [0×1 java.lang.reflect.TypeVariable[]]