Java 如何检查类型化类的类型<&燃气轮机;

Java 如何检查类型化类的类型<&燃气轮机;,java,reflection,Java,Reflection,我在方法中传递参数,该方法已声明为接受参数type class…其他,在传递参数(如String.class和Integer.class之后,我想知道在该方法中传递的类型(类)参数 我收到了什么参数,我将其转换为object并尝试检查类型,但它不起作用 public void processVarargIntegers(String label, Class<?>... others) { System.out.println(String.format("processi

我在方法中传递参数,该方法已声明为接受参数
type class
…其他,在传递参数(如
String.class
Integer.class
之后,我想知道在该方法中传递的类型(类)参数

我收到了什么参数,我将其转换为object并尝试检查类型,但它不起作用

public void processVarargIntegers(String label, Class<?>... others) {

    System.out.println(String.format("processing %s arguments for %s", others.length, label));
    Arrays.asList(others).forEach(a -> {

        try {
            Object o = a;
            if (o instanceof Integer) {
                System.out.println(" >>>>>>>>>>>>> Integer");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    });
}
public void processvararginteger(字符串标签、类…其他){
System.out.println(String.format(“为%s处理%s参数”,others.length,label));
Arrays.asList(其他).forEach(a->{
试一试{
对象o=a;
if(o整数的实例){
System.out.println(“>>>>>>>>>>整数”);
}
}捕获(例外e){
e、 printStackTrace();
}
});
}
public void processvararginteger(字符串标签、类…其他){
System.out.println(String.format(“为%s处理%s参数”,others.length,label));
Arrays.asList(其他).forEach(a->{
试一试{
对象o=a;
if(o整数的实例){
System.out.println(“整数”);
}
}捕获(例外e){
e、 printStackTrace();
}
});
}

如果a是integer
System.out.println(“integer”)的实例,因为对象是类的实例,所以if语句永远不会工作。这将有助于:

if (o == Integer.class)
    System.out.println("Integer")

if语句永远不会工作,因为对象是
类的实例。这将有助于:

if (o == Integer.class)
    System.out.println("Integer")

如果要检查类,可以使用
If(a==Integer.class)

public void processvararginteger(字符串标签、类…其他){
System.out.println(String.format(“为%s处理%s参数”,others.length,label));
Arrays.asList(其他).forEach(a->{
试一试{
if(a==Integer.class){
System.out.println(“>>>>>>>>>>整数”);
}
}捕获(例外e){
e、 printStackTrace();
}
});
}

如果要检查类,如果(a==Integer.class)

public void processvararginteger(字符串标签、类…其他){
System.out.println(String.format(“为%s处理%s参数”,others.length,label));
Arrays.asList(其他).forEach(a->{
试一试{
if(a==Integer.class){
System.out.println(“>>>>>>>>>>整数”);
}
}捕获(例外e){
e、 printStackTrace();
}
});
}

如果您只想打印出类的名称,这将是一个简单的解决方案:


导入java.util.array;
公共班机{
公共静态void main(字符串[]args){
新的Main().processvararginteger(“test”、Integer.class、String.class、Number.class);
}
public void processvararginteger(字符串标签、类…其他){
System.out.println(String.format(“为%s处理%s参数”,others.length,label));
Arrays.asList(其他).forEach(a->System.out.println(a.getName());
}
}
然后,输出将是:

processing 3 arguments for test
java.lang.Integer
java.lang.String
java.lang.Number

如果您只想打印出类的名称,这将是一个简单的解决方案:


导入java.util.array;
公共班机{
公共静态void main(字符串[]args){
新的Main().processvararginteger(“test”、Integer.class、String.class、Number.class);
}
public void processvararginteger(字符串标签、类…其他){
System.out.println(String.format(“为%s处理%s参数”,others.length,label));
Arrays.asList(其他).forEach(a->System.out.println(a.getName());
}
}
然后,输出将是:

processing 3 arguments for test
java.lang.Integer
java.lang.String
java.lang.Number

Class
始终是类而不是对象。因此,
o……
实例只有在检查
类时才为真。您需要的是类似于
Integer.class.isAssignableFrom(o)
的东西,以检查您是否得到了
Integer.class
或子类(要得到确切的类,只需使用
Integer.class.equals(o)
)。顺便问一下,为什么要发布两次完全相同的方法(打印语句除外)?还要注意
对象o=a根本不是必需的。最后请注意,名称
processVarargIntegers
表示
others
应该包含值而不是类,因此
others
的类型可能必须是
Object
(或者,如果您只想允许数字,则可以使用更具体的通用超类型,如
Number
).
Class
将始终是类而不是对象。因此,
o……
实例只有在检查
类时才为真。您需要的是类似于
Integer.class.isAssignableFrom(o)
的东西,以检查您是否得到了
Integer.class
或子类(要得到确切的类,只需使用
Integer.class.equals(o)
)。顺便问一下,为什么要发布两次完全相同的方法(打印语句除外)?还要注意
对象o=a根本不是必需的。最后请注意,名称
processVarargIntegers
表示
others
应该包含值而不是类,因此
others
的类型可能必须是
Object
(或者,如果您只想允许数字,则可以是更具体的通用超类型,如
Number
)。