如何确定内部类是不是实现了接口?

Posted

技术标签:

【中文标题】如何确定内部类是不是实现了接口?【英文标题】:How to determine if an inner class implements an interface?如何确定内部类是否实现了接口? 【发布时间】:2022-01-22 23:40:16 【问题描述】:

我有这个代码:

public class test

    private testInterface i1;

    public test(testInterface i1) 
        this.i1 = i1;
   
    
     test() 
    
   

    interface testInterface 
    
        

 class inner1 implements testInterface 

    
 class inner2 implements testInterface 

    
 class inner3 implements testInterface 

    

     public void determineClass_Interfac()
      


public class main 

    public static void main(String[] args) 
        test test1 =new test(new test().new inner1());
    

我不知道这是否可行,但我想要实现的是通过调用方法 determineClass_Interfac() 来确定创建了哪个内部类对象。因此,它应该依赖于在类构造函数中创建的对象(这里是 innerClass1)。 我的方法可能完全错误,我只是在这里试验。

【问题讨论】:

这里的目标是什么?假设你发现了,有什么用? 使用 instanceof 操作符。 如果您只需要知道某个内部(或其他)类是否实现了接口,您可以使用instanceof。例如:inner1 test1 = new test().new inner1(); System.out.println(test1 instanceof testInterface); 请关注java naming conventions 【参考方案1】:

您可以使用instanceof 运算符来了解特定实例是否正在实现特定接口或类。

所以代码

public interface MyInterface  
   ...


public class MyInterfaceImpl implements MyInterface 
   ...

你可以检查一下

MyInterface myInterface = new MyInterfaceImpl();
if (myInterface instanceof MyInterface) 
     // It goes here because myInterface object is of type MyInterfaceImpl implementing the MyInterface


MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl();
if (myInterfaceImplinstanceof MyInterface) 
     // Also now you go in the if because the runtime type of myInterfaceImpl
     // is implementing your interface

这种方法适用于任何类型的类和接口。该类是否为内部类并不重要。


我也给你一些提示:

为方法和类使用有意义的名称 类和接口的名称使用大写 如果您需要从外部类的上下文之外实例化嵌套类,您可能应该对嵌套类使用静态。 determineClass_Interfac 方法应将您要测试的对象作为参数。

【讨论】:

你是对的......内部阶级是错误的词。嵌套类更好。如果您需要在容器类的任何现有实例之外实例化该类,则需要将其创建为静态。 @user16320675 我更新了答案

以上是关于如何确定内部类是不是实现了接口?的主要内容,如果未能解决你的问题,请参考以下文章

9.接口与内部类

内部类2——为什么需要内部类?

如何从匿名内部类调用特定的父构造函数?

java基础之匿名内部类

第6章 接口与内部类

第11章 接口与内部类