反思:为什么会有setAccessible()这样的方法?

2024-01-05

只是想知道,为什么发明 Java 的人要写这样的方法setAccessible(boolean flag),这使得访问修饰符(特别是私有的)无用并且无法保护字段、方法和构造函数不被访问?看下面的简单例子:

public class BankAccount
{
    private double balance = 100.0;

    public boolean withdrawCash(double cash)
    {
        if(cash <= balance)
        {
            balance -= cash;
            System.out.println("You have withdrawn " + cash + " dollars! The new balance is: " + balance);
            return true;
        }
        else System.out.println("Sorry, your balance (" + balance + ") is less than what you have requested (" + cash + ")!");
        return false;
    }
}
import java.lang.reflect.Field;

public class Test
{
    public static void main(String[] args) throws Exception
    {
        BankAccount myAccount = new BankAccount();
        myAccount.withdrawCash(150);

        Field f = BankAccount.class.getDeclaredFields()[0];
        f.setAccessible(true);
        f.set(myAccount, 1000000); // I am a millionaire now ;)

        myAccount.withdrawCash(500000);
    }
}

OUTPUT:

Sorry, your balance (100.0) is less than what you have requested
(150.0)! You have withdrawn 500000.0 dollars! The new balance is: 500000.0

因为有些代码是可信代码——也就是说,如果本地应用程序想要这样做,也许这没什么大不了的。为了不受信任的代码,尽管如此——即小程序、Web 启动应用程序、RMI 存根或任何其他下载的代码——有一个SecurityManager到位,(通常基于策略文件)有机会说“对不起,查理”并否认setAccessible()要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反思:为什么会有setAccessible()这样的方法? 的相关文章

  • Java 中类似 HashMap 的可排序数据结构?

    Java 中是否有某种类似于 HashMap 的数据结构 可以按键或值排序 在 PHP 中 您可以拥有可排序的关联数组 Java中有这样的东西吗 HashMaps 几乎按照定义是未排序的 一个好的哈希函数会产生看似随机的密钥分布 如果你想使
  • 在 JTable 中使用自定义 TablecellRenderer

    我是 Java 新手 我创建了一个JTable 就是这样addRow当我尝试向表中添加一行时 该方法有效 private void addTableRow String type String name String rank String
  • JAVA_HOME环境变量和Java JDK趣事

    我想让 Java 在 1 6xxx 上运行 我更改了 JAVA HOME 变量并将其指向目录 C Program Files Java jdk1 6 0 16 我重新启动 PC 我想我可以检查我的机器指向哪个版本的 Java 但它仍然指向旧
  • 将倒计时器从 10 秒改为 1 秒

    我有一个倒计时器 它以 1 秒的增量从 10000 毫秒倒计时到 0 毫秒 以使按钮在 10 秒后可单击 尽管计时器是准确的并且按照代码的说明执行操作 但我想更改秒的表示方式 但我不知道如何更改 java void startTimer c
  • 如何通过两跳 SSH 隧道使用 JProfiler

    我正在尝试将 JProfiler 连接到在我将调用的服务器上运行的 JVMremote 该服务器只能从我的工作站访问 local 通过我将调用的另一台服务器middle 我的计划是将 JProfiler 连接到remote是这样的 安装 J
  • 克隆 dom.Document 对象

    我的目的是将xml文件读入Dom对象 编辑dom对象 其中涉及删除一些节点 完成此操作后 我希望将 Dom 恢复到其原始状态 而不实际解析 XML 文件 无论如何 我可以克隆第一次解析 xml 文件后获得的 dom 对象吗 这个想法是避免一
  • Spring批量写入器限制

    我正在工作 Spring Batch 项目 从数据库读取记录然后写入rabbitmq 然后发送到HTTP消息网关 网关有150TPS我需要将我的应用程序限制为 150TPS 有没有办法带弹簧批的油门或者还有其他更好的方法吗 你能行的 在 S
  • 如何将 ArrayList 中的所有值相加或转换为 ArrayList

    我试图将 ArrayList 中的所有值相加 但没有任何方法可以让我得到总和 我必须找到从文本文件中提取的数字的平均值 public static void main String args throws IOException File
  • 如何在不使用反射的情况下查看对象是否是数组?

    在Java中如何在不使用反射的情况下查看对象是否是数组 如何在不使用反射的情况下迭代所有项目 我使用 Google GWT 所以不允许我使用反射 我很想在不使用反射的情况下实现以下方法 private boolean isArray fin
  • 使用 JavaFX 将可执行 Jar 限制为一个窗口

    我正在通过构建 JavaFX 应用程序E fx 剪辑 and Java场景生成器 基本功能是登录窗口 登录后 将打开新窗口 然后登录窗口消失 目前还处于原型阶段 用完eclipse后 我想要的功能都有了 启动时显示登录窗口 代码如下 Ove
  • 使用 Jboss7 加载资源返回 null

    如何使用Jboss7 1从java代码中加载图像等资源 这曾经与 Jboss4 一起使用 this getClass getClassLoader getResourceAsStream myapp includes images imag
  • 如何解决声纳中的 dodgy:unchecked/unconfirmedcast 问题?

    我在下面的代码中通过声纳获得异常 我该如何解决这个问题 建议我 Override public boolean validate BaseInfo infoObject boolean isValid true AckTransferPay
  • 如何保存/加载 BigInteger 数组

    我想保存 加载BigInteger数组传入 传出 SharedPreferences 如何做呢 例如对于以下数组 private BigInteger dataCreatedTimes new BigInteger 20 Using Gso
  • 当 javadoc 未附加到依赖项时,如何将 javadoc 引用到 Maven 的 eclipse 插件中的依赖项

    我在开发中使用 Eclipse Maven 和 Java 我使用 Maven 下载依赖项 jar 文件和 javadoc 如果可用 并使用 Maven 的 eclipse 插件为 Eclipse 生成 project 和 classpath
  • 使用 System.out.println 显示特殊字符

    我在将带有特殊字符的文本从网络服务发送或显示到数据库时遇到问题 在我的 Eclipse 上 我已将字符编码设置为 UTF 8 但它仍然不允许我显示字符 例如 像下面的代码一样简单的打印 String test System out prin
  • 如何在 VSCode 中热重载 Tomcat 服务器

    我正在从 Eclipse IDE VSCode 分别用于编码 Java servlet 和 HTML CSS JS 网页 迁移到仅使用 Visual Studio Code 因为它的轻量级 我为 VSCode 安装了几个 Java 扩展 R
  • 如何在java中进行多处理,以及预期的速度提升是多少?

    我是一个新手 使用 Java 对 csv 文件进行一些数据处理 为此 我使用 Java 的多线程功能 线程池 将 csv 文件批量导入到 Java 中 并对每一行执行一些操作 在我的四核处理器上 多线程大大加快了处理速度 我很想知道多处理如
  • 如何在 logback 中启动时滚动日志文件

    我想配置 logback 来执行以下操作 记录到文件 当文件达到 50MB 时滚动文件 仅保留 7 天的日志 启动时始终生成一个新文件 滚动 除了最后一项 启动卷 外 我一切都正常 有谁知道如何实现这一目标 这是配置
  • 旧的和奇异的 JVM 上 java.io.BufferedInputStream 的默认缓冲区大小是多少?

    我一直在为一篇关于以下内容的博客文章进行一些研究java io BufferedInputStream和缓冲区 显然 多年来 默认值已从区区 512 字节增长到 8192 字节 冒昧地 Sun 的 Java 7 实现 甚至在JDK 1 1
  • 仅当用户开始输入时清除 JavaFX TextField 中的提示文本

    默认行为是当字段获得焦点时 字段中的提示文本将被删除 那是标记在场上的时候 是否可以配置文本字段 以便仅在用户开始输入时删除提示文本 否则 我需要在每个文本字段旁边 上方添加一个标签 以描述其中的值 我知道它有点旧 但我自己也需要它 这仍然

随机推荐

  • 使用 C# 从 SQL Server 数据生成 XML

    我在 SQL Server 中有一个生成 XML 输出的查询 我想使用 C 产生相同的结果 是否可以 查询是 select T1 1 HomeID as HomeID select T1 2 DayID as ID select T2 Rn
  • com.sun.xml.internal.ws.client 不存在

    我试图捕获 ClientTransportException 但我的程序在编译阶段失败 出现以下异常 ERROR workspace rates java service bundle1 src main java com connecto
  • 有没有办法知道 NSUserNotificationCenter 中有多少个 NSUserNotification?

    Is there any non private way of knowing how many notifications there are in the Notification Center NSUserNotificationCe
  • 为什么 PDO fetchColumn() 在这里不起作用

    我正在尝试计算查询返回的行数 我正在这样做 what Norman stmt conn gt prepare select names as names from names where names what stmt gt bindPar
  • 如何为文本框添加效果到样式

    我试图向样式添加效果以便重用它 但由于某种原因它不起作用
  • Spring REST 返回 PDF - 响应状态 406(不可接受)

    我读了很多关于此类问题的问题 但他们都建议使用正确的杰克逊版本 这是我目前的情况 休息 API RequestMapping value get pdf id headers Accept method RequestMethod GET
  • Swift Combine:将发布者转变为只读 CurrentValueSubject

    有时我的视图模型使用 Published财产或PassthroughSubject 但我不希望它对外界可写 很简单 把它变成公共的AnyPublisher并将可写的保留为私有 如下所示 class ViewModel Published p
  • Google API Oauth .net core 3.1

    我有一个 net core 3 1 MVC Web 应用程序 我正在尝试开始使用一些谷歌 API 我发现谷歌文 档非常混乱 在官方文档中 我发现 MVC 库不支持 net core 有人可以为我指明正确的方向 我应该如何开始在 MVC ne
  • 使用 ArcGIS JS API 的 dojo 解析器和 TypeError

    我收到此错误 类型错误 未定义 不是函数 评估 parser parse 这是我的代码
  • 未启用时更改按钮背景

    我需要改变我的Button仅当未启用背景 例如 SolidColorBrush 时 IsEnabled false 我能怎么做 我要修改按钮吗Style使用 XAML 或者我可以通过编程方式完成这项工作吗 在未启用背景时仅更改背景的正确 X
  • 使用 jQuery 按顺序添加和删除类

    我想说的是 如果我的 div 没有活动类 请添加它 如果该类确实处于活动状态 请将其删除 我有以下内容 只有我的代码添加了该类 然后继续查询并在最后删除它 最好的解决方案是什么 2个单独的单击功能 work showcase click f
  • Woocommerce 根据所选的运输类别在结账时更改运输方式标题

    我想根据产品的运输类别更改商店结帐中显示的运输方式标题 e g 运输方式标题目前为统一费率 我有 2 个产品 如果购买产品 A 我需要它有 易碎品运输 如果购买产品 B 我需要它具有 标准运输 遗憾的是 我必须使用类来进行运输 因此其他方法
  • Angular 2 服务的异步初始化

    我有一个 Angular 2 服务 需要在初始化时执行异步工作 并且在初始化完成之前不应该使用 Injectable export class Api private user private storage constructor pri
  • Numpy 数组广播规则

    我在理解 Numpy 中数组广播的规则时遇到一些困难 显然 如果对两个具有相同维度和形状的数组执行逐元素乘法 一切都很好 另外 如果将多维数组乘以标量 它就会起作用 这我明白了 但是如果你有两个 N 维数组不同的形状 我不清楚广播规则到底是
  • 检测到 jQuery.ajax 调用因页面正在重新加载而失败?

    我进行了大量的 ajax 调用 并以抛出消息的方式处理来自它们的错误 我发现如果在页面重新加载时正在进行 ajax 调用 例如单击刷新 或导航到另一个 URL 然后我正在进行的 ajax 调用会触发它们的错误回调 如何区分真正的错误和因页面
  • 向 qmake 添加一个带有值的定义?

    如何使用 qmake 添加带有值的定义 例如 这在我的 pro 文件中不起作用 如我所料 DEFINES WINVER 0x0500 nor DEFINES WINVER 0x0500 如何在开始编译之前将 WINVER 定义为 0x050
  • 如何隐藏DataGridView的网格线? Winforms C#

    如何隐藏DataGridView的网格线 我在互联网上搜索过但没有找到解决方案 请帮忙 谢谢 你可以试试 MyGrid CellBorderStyle DataGridViewCellBorderStyle None
  • Android Spannable:如何清除颜色?

    我在 RecyclerView CardViews 的 SearchView 上设置了 Spannable 如果在 CardView 上找到用户输入的文本 则该文本将以红色突出显示 当 SearchView 行被清除时 我希望 CardVi
  • 有没有办法创建一个可以接受数组和范围作为输入的 VBA 函数?

    我正在尝试创建一个函数 它可以接受范围或数组来执行一些进一步的计算 当数组通过时 该函数工作正常 但是当该函数在工作表中的范围内使用时 它会给我值 错误 我的代码如下所示 Function COMRET data as variant N
  • 反思:为什么会有setAccessible()这样的方法?

    只是想知道 为什么发明 Java 的人要写这样的方法setAccessible boolean flag 这使得访问修饰符 特别是私有的 无用并且无法保护字段 方法和构造函数不被访问 看下面的简单例子 public class BankAc