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”)的实例应该执行code>,因为对象是类的实例,所以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
)。