为了账号安全,请及时绑定邮箱和手机立即绑定

动态检查实例是否实现接口

动态检查实例是否实现接口

繁星淼淼 2022-10-12 10:22:31
我正在尝试创建一个函数,它接受两个参数——一个类实例和一个接口——如果提供的类实例实现了提供的接口,则返回 true。我的问题是我找不到以这种方式将接口作为参数传递的方法。我的尝试目前看起来像这样:interface myInterface{}class myClass implements myInterface{}...// Function to check if a class implements an interface:boolean doesImplementInterface(object classToTest, ??? interfaceToTestAgainst){    if(i.getClass().isInterface())    {        return o.getClass().isInstance(i);    }    return false;}...// Would call the "doesImplementInterface" method like this:doesImplementInterface(new myClass(), myInterface);在这里可能很难看到,但是在定义“doesImplementInterface”函数时,我无法弄清楚第二个参数必须是什么类型。我正在尝试传递所提供的类将对其进行测试的接口,但据我所知,没有可用于以这种方式传递接口的变量类型。是否可以以这种方式将接口作为参数传递,还是应该开始探索替代选项?
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

解释

您需要将接口作为Class(文档)令牌传递。此外,您需要检查相反的方式:interfaceToTestAgainst.isInstance(classToTest). 目前,您正在尝试检查接口是否是该类的实例。


boolean doesImplementInterface(Object classToTest, Class<?> interfaceToTestAgainst) {

    if (!interfaceToTestAgainst.isInterface()) {

        return false;

    }

    return interfaceToTestAgainst.isInstance(classToTest);

}

或在一行中:


boolean doesImplementInterface(Object classToTest, Class<?> interfaceToTestAgainst) {

    return interfaceToTestAgainst.isInterface()

        && interfaceToTestAgainst.isInstance(classToTest);

}

稍微改了一下名字:


boolean isInstanceOfInterface(Object obj, Class<?> interfaceToken) {

    return interfaceToken.isInterface()

        && interfaceToken.isInstance(obj);

}

调用该方法:


boolean result = isInstanceOfInterface(new Dog(), CanBark.class);

笔记

您的问题听起来像是XY 问题。首先可能有更好的解决方案来解决您试图通过此尝试解决的问题。


如果可以避免的话,丢失类型信息,将系统降级到不再是编译时安全的系统通常是非常糟糕的。


考虑重新思考/设计你的方法。不过,请注意,我不知道您首先要解决什么问题。


查看完整回答
反对 回复 2022-10-12
?
阿晨1998

TA贡献2037条经验 获得超6个赞

您不需要为此创建方法。简单使用

boolean doesImplement = ITest.class.isAssignableFrom(Test.class)

在实例的情况下,使用 instance.getClass() 即

boolean doesImplement = ITest.class.isAssignableForm(testObj.getClass())


查看完整回答
反对 回复 2022-10-12
  • 2 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信