[java] 클래스가 Java에서 인터페이스를 구현하는지 확인
나는 Class물건이있다. Class객체가 나타내는 유형이 특정 인터페이스를 구현 하는지 확인하고 싶습니다 . 이것이 어떻게 성취 될 수 있을지 궁금합니다.
다음 코드가 있습니다. 기본적으로 지정된 패키지의 모든 클래스 배열을 가져옵니다. 그런 다음 배열을 살펴보고 인터페이스를 구현하는 Class 객체를지도에 추가하고 싶습니다. 문제는 isInstance()개체를 매개 변수로 사용하는 것입니다. 인터페이스를 인스턴스화 할 수 없습니다. 그래서 나는 이것에 약간의 손실이 있습니다. 어떤 아이디어?
Class[] classes = ClassUtils.getClasses(handlersPackage);
for(Class clazz : classes)
{
    if(clazz.isInstance(/*Some object*/)) //Need something in this if statement
    {
        retVal.put(clazz.getSimpleName(), clazz);
    }
}
답변
다음을 사용해야합니다 isAssignableFrom.
if (YourInterface.class.isAssignableFrom(clazz)) {
    ...
}
답변
아래 함수를 사용하여 구현 된 모든 인터페이스를 얻을 수 있습니다.
Class[] intfs = clazz.getInterfaces();
답변
사용 class.getInterfaces()하고 인터페이스 클래스가 있는지 확인할 수 있습니다 .
Class someInterface; // the interface you want to check for 
Class x; // 
Class[] interfaces = x.getInterfaces();
for (Class i : interfaces) {
    if (i.toString().equals(someInterface.toString()) {
        // if this is true, the class implements the interface you're looking for
    }
}
답변
“.class”를 추가하여 인스턴스를 설정할 수도 있습니다.
Class[] classes = ClassUtils.getClasses(handlersPackage);
for(Class clazz : classes)
{
    if(Interface.class.isAssignableFrom(clazz))
    {
        retVal.put(clazz.getSimpleName(), clazz);
    }
}
