【问题标题】:Other ways to obtain `int[].class`?其他获取 `int[].class` 的方法?
【发布时间】:2018-08-31 19:05:02
【问题描述】:

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

比如我不能打电话

int.class

但可以

java.lang.Integer.TYPE

是否可以以同样的方式在 JDK API 的某处找到int[].class

【问题讨论】:

标签: java matlab reflection primitive-types


【解决方案1】:

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

int[].class.getName()

结果如下:

[I

并试图扭转它:

Class.forName("[I")

这似乎可以解析它:class [I

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

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

【讨论】:

    【解决方案2】:

    您可以使用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[]]
    

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      相关资源
      最近更新 更多