Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有了反射,是否有可靠的方法来确定某个方法在给定类中是否可见?_Java_Reflection_Visibility - Fatal编程技术网

Java 有了反射,是否有可靠的方法来确定某个方法在给定类中是否可见?

Java 有了反射,是否有可靠的方法来确定某个方法在给定类中是否可见?,java,reflection,visibility,Java,Reflection,Visibility,在Java中,是否有一种简单可靠的方法来确定通过反射传递的方法是否从给定类可见:即,可以从给定类调用该方法,而不会引发IllegaAccessException 我知道可以在方法上调用setAccessibletrue来覆盖Java可见性约束,但我想确定它是否应该是可见的,而不是无论如何调用它。method类上的isAccessible方法看起来很有希望,但这只是测试是否调用了setAccessibletrue 简单地尝试调用该方法,然后捕获IllegaccessException也不是一个选项

在Java中,是否有一种简单可靠的方法来确定通过反射传递的方法是否从给定类可见:即,可以从给定类调用该方法,而不会引发IllegaAccessException

我知道可以在方法上调用setAccessibletrue来覆盖Java可见性约束,但我想确定它是否应该是可见的,而不是无论如何调用它。method类上的isAccessible方法看起来很有希望,但这只是测试是否调用了setAccessibletrue

简单地尝试调用该方法,然后捕获IllegaccessException也不是一个选项,因为这将只确定当前类的可见性,而不是任何给定类的可见性

到目前为止,我提出的唯一解决方案是这样做:

public boolean isVisible(Method toBeCalled, Class<?> fromClass) {

    if (Modifier.isPublic(toBeCalled.getDeclaringClass().getModifiers()) && 
            Modifier.isPublic(toBeCalled.getModifiers())) {
        return true;
    }

    if (toBeCalled.getDeclaringClass().isAssignableFrom(fromClass) 
            && Modifier.isProtected(toBeCalled.getModifiers())) {
        return true;
    }

    if (fromClass.getPackage().equals(toBeCalled.getDeclaringClass().getPackage()) &&
            ! (Modifier.isPrivate(toBeCalled.getModifiers())) ) {
        return true;
    }

    return false;
}
这在某种程度上是可行的,但我基本上是在编写Java可见性规则,这需要大量的测试,而且我确信在诸如内部类之类的事情上,有很多边缘情况我没有考虑到

有人知道一种简单可靠的方法吗