当前位置: 首页 > 面试题库 >

检查泛型T是否实现接口

荀振国
2023-03-14
问题内容

所以我在Java中有这个课程:

public class Foo<T>{
}

在这个类中,我想知道T是否实现某些接口。

以下代码不起作用,但这是我要完成的工作的主意:

if(T.class implements SomeInterface){
    // do stuff
}

所以我想检查T传递给Foo 的类是否具有implements SomeInterface其签名。

可能吗?怎么样?


问题答案:

奇怪的是,泛型也extends用于接口。1您将要使用:

public class Foo<T extends SomeInterface>{
    //use T as you wish
}

这实际上是实现的要求, 而不是true / false check

为了进行真/假检查,请使用无限制的generics(class Foo<T>{)并确保获得a,Class<T>以便您具有可靠的类型:

if(SomeInterface.class.isAssignableFrom(tClazz));

哪里tClazz是类型的参数java.lang.Class<T>

如果您得到的是可靠类型的参数,那么无非就是:

if(tParam instanceof SomeInterface){

但这仅适用于泛型声明。

1如果要扩展一个类和多个接口,则可以执行以下操作:<T extends FooClass & BarInterface & Baz>该类(仅一个,因为Java中没有多重继承)必须 首先进行 ,然后以任何顺序进行任何接口。



 类似资料:
  • 问题内容: 我是Java泛型的新手,来自.NET世界,我习惯于编写这样的方法: 该方法接受通用类型的对象,并检查该对象是否实现通用接口的 特定 版本,在这种情况下为。 现在,在Java中,我可以执行以下操作: 但 Java并 没有 让我做 据我所知,由于类型擦除,通常在Java中,此类将由类对象处理,我们将执行以下操作: 但是由于我要检查的类型是通用接口,所以您不能这样做: 那么,如何在Java中

  • 我在TypeScript中使用一个接口来定义一个函数,该函数仅在扩展基类的一些类上可用。这是我到目前为止的代码的简化版本: 现在,问题是我会添加更多的“行走”动物,这样移动动物的功能就会变得太大而无法控制。我想做的事情是这样的: 但是,“implements”检查不起作用,在使用接口时,我找不到与“instanceof”等效的。在Java中,“instanceof”的使用似乎可以在这里使用,但Ty

  • 问题内容: 我已经读过“ EffectiveGo”和其他类似的问答:golang接口符合性编译类型检查,但是我仍然无法正确理解如何使用此技术。 请参见示例: 如果实现了接口,是否有任何简单的方法(例如,不使用反射)检查值? 问题答案: 如果您不知道值的类型,则只需检查值是否实现了接口。如果类型已知,则该检查由编译器自动完成。 如果您仍然想进行检查,则可以使用您提供的第二种方法进行检查: 在编译时会

  • 这里有一个示例代码,没有看明白, 1、请问下,泛型嵌套<PropsWithChildren<CreateFormProps>>,这里的<CreateFormProps> 是一个interface,可以是type吗? 2、<PropsWithChildren<CreateFormProps>> 代表什么意思呢?是否代表泛型:<PropsWithChildren> 实现了接口interface Cre

  • 问题内容: 如何检查某个类是否实现接口?当有: 如何检查是否实现接口? 该方法是否被正确覆盖,因此可以返回新创建的方法? 问题答案: 对于一个实例 然后做 对于Class实例

  • 好了, 我有一个标记接口: 然后我有一个类实现这个接口: 现在假设我有一个持有类MePOJO的引用: 那么,我如何通过使用来确定类是否实现了?