- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是 Reflection 的新手,我有这样的疑问:
public void setAccessible(boolean flag) throws SecurityException
此方法有一个boolen
参数标志,表示任何字段或方法的新可访问性。
例如,如果我们尝试从类外部访问类的 private
方法,那么我们使用 getDeclaredMethod
获取该方法并将可访问性设置为 true
,所以它可以被调用,比如:method.setAccessible(true);
现在在什么情况下我们应该使用 method.setAccessible(false);
,例如当有一个 public
方法并且我们将可访问性设置为 false 时可以使用它。但这有什么必要呢?我的理解清楚了吗?
如果没有使用 method.setAccessible(false)
那么我们可以像这样更改方法签名:
public void setAccessible() throws SecurityException
最佳答案
您可能一辈子都不会做setAccessible(false)
。这是因为 setAccessible 不会永久更改成员的可见性。当你使用 method.setAccessible(true)
之类的东西时,你可以对 this method
实例进行后续调用,即使原始方法来源是私有(private)的。
例如考虑这个:
A.java
*******
public class A
{
private void fun(){
....
}
}
B.java
***********
public class B{
public void someMeth(){
Class clz = A.class;
String funMethod = "fun";
Method method = clz.getDeclaredMethod(funMethod);
method.setAccessible(true);
method.invoke(); //You can do this, perfectly legal;
/** but you cannot do this(below), because fun method's visibilty has been
turned on public only for the method instance obtained above **/
new A().fun(); //wrong, compilation error
/**now you may want to re-switch the visibility to of fun() on method
instance to private so you can use the below line**/
method.setAccessible(false);
/** but doing so doesn't make much effect **/
}
关于java - AccessibleObject 类的 setAccessible 方法背后有一个 boolean 参数的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16230601/
我正在寻找匹配 /(?=\W)(gimme)(?=\W)/gi 或类似的东西。 \W 应该是零宽度字符来包围我的实际匹配项。 也许有一些背景。我想用添加的文字填充替换某些单词(总是 \w+),但前提是
如何在不使用 Intent 连接到 VPN 服务的情况下以编程方式检测流量是否正在通过 VPN。有系统调用吗? 最佳答案 这个有效: private boolean checkVPN() {
我是一名优秀的程序员,十分优秀!