当前位置: 首页 > 知识库问答 >
问题:

如何传递类名作为参数,然后使用它来检查一个对象是否是java中该类的实例?

端木皓君
2023-03-14

我读了一些类似问题的回答,但没有得到满意的答案。我想创建一个通用方法,它接受类型为E的graph对象。我想传递这个对象和一个类名。在该方法中,我想从用户那里读取一个输入,检查它是否是给定类的实例,如果不是,则抛出一些错误消息。我尝试使用以下代码来实现同样的目的:

public void readDependencyPair(Scanner scanner, String prompt, MyGraph<E> graph, String clazz) {
        System.out.println(prompt);
        Object obj = scanner.next();
        Class<?> c = Class.forName(clazz);
        if(obj instanceof c) {...
        }
}

上面的代码在“if obj是c的实例”一行给出了错误信息,表示“c无法解析为类型。请创建类'c'或接口'c'或枚举'c'”。

我甚至试图传递clazz类而不是字符串参数。它仍然显示了“clazz”无法解析为类型的相同错误。

共有3个答案

仲孙经赋
2023-03-14

对于您要做的事情,已经有一个现有的方法,Class#isAssignablefrom

public void readDependencyPair(Scanner scanner, String prompt, MyGraph<E> graph, String clazz) {
    System.out.println(prompt);
    String obj = scanner.next();
    Class<?> c = Class.forName(clazz);

    if(Class.forName(obj).isAssignableFrom(c)) {
        ...
    }
}
聂溪叠
2023-03-14

例如,您可以将Class用于参数类型,以声明如下函数:

public boolean isInstance(Class<?> c,Object obj){
        return obj.getClass().equals( c);
    }

然后这样使用:

@Test
public void testIsInstance(){
    User u = new User();
    Assert.assertTrue(isInstance( User.class, u));

}
范稳
2023-03-14

你可以用

if (c.isInstance(obj))
    ....

看看这里的文件

 类似资料:
  • 问题内容: 我正在玩Java的反射API,并尝试处理一些字段。现在,我要确定字段的类型。字符串很简单,只需执行即可。其他非派生类也是如此。但是,如何检查派生类?例如作为的子类。我无法找到任何或方法。我是否需要遍历所有人并自己找到超人? 问题答案: 您需要此方法: 一般情况下,(以上)应替换为并应替换为 从JavaDoc: 确定此对象表示的类或接口是否与指定参数表示的类或接口相同或超类或超接口。如果

  • 对于此示例: 如何检查 是否是 Foo 的实例(但不是其 foo 子类的实例)?那是: checkInstance(qux,Foo.class)=true checkInstance(qux,Bar.class)=false 有没有类似于< code>instanceof的语句来进行这种检查?或者我应该使用< code>qux.getClass()。equals(Foo.class)

  • 我有一个使用compare方法的类。该方法将两个对象作为参数。使用java反射,我能够获得所有私有和受保护的字段,并使用一些花哨的东西检查它们的返回类型,然后对它们做我想做的事情。 这对我个人有好处。我知道我想做什么,所以我只是比较两个相同类型的对象,仅此而已。 所以物体是一样的,只是换了位置..有办法防止这种情况吗?我有一个跟踪代码来存储这些对象中的每一个差异..所以如果他们有不同的立场,我会有

  • 问题内容: 通过使用Java反射,我们可以轻松知道对象是否为数组。判断对象是否为集合(Set,List,Map,Vector …)的最简单方法是什么? 问题答案:

  • 本文向大家介绍如何检查一个对象是否为空,包括了如何检查一个对象是否为空的使用技巧和注意事项,需要的朋友参考一下 检查一个数组为空很容易,直接调用 length 方法即可,那么如何检查一个对象是否为空呢 ❓ 这里的空指的是对象没有自有属性 假设这里有两个对象,一个是 obj 一个是 anotherObj 想了半天查看对象是否有 Symbol 属性只能使用 getOwnPropertySymbols

  • 问题内容: 有没有一种简单的方法来验证对象属于给定的类?例如,我可以 但这需要每次在运行中实例化一个新对象,而只是将其丢弃。有没有更好的方法来检查“ a”是否属于类“ MyClass”? 问题答案: 如其他答案所述,关键字通常是您想要的。请记住,超类也会返回。 如果要查看对象是否是类的直接实例,则可以比较该类。您可以通过获取实例的类对象。您可以通过静态访问特定的类。 因此,例如: 在上面的例子中,