나는 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);
}
}