`
mabusyao
  • 浏览: 252664 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

难题求解

    博客分类:
  • java
阅读更多
今天和同事讨论一道面试题:“是否有办法禁用String的equals方法?”

有两个一下子就能想到的办法:

1,修改源码重新打包。
2,利用类加载器加载一个虚假的类。(此方法如果我没记错的话,应该是不可行的,java虚拟机上有详细介绍)

然后如果不用这两种办法,而是在代码级别是否可以解决呢?

我首先想到的就是是否可以利用String类在JVM中的class对象来解决,其实也就是反射机制。我在Method类里找到了一个setAccessible方法,尝试了下:
		String test = "hello world!";
		
		Method[] methods = String.class.getMethods();
		
		for(Method method : methods) {
			if(method.getName().equals("equals")) {
				System.out.println(method.isAccessible());
				method.setAccessible(false);
			}
		}
		System.out.println(test.equals("hello world!"));


结果证明这个方法是不可行的,我查找了些资料,setAccessible其实是设置当JVM做反射时是否做安全检查,而不是该方法是否能够被访问。


我就此郁闷了,想不出还有什么方向可以考虑的。

求帮助。
分享到:
评论
3 楼 mabusyao 2011-04-20  
最近几天研究了下java中的线程上下文classloader, 据说是可以跳过所谓的父类委托机制。

事实证明确实是可以用自己写的classloader来设置线程上下文classloader,然而当真正进行加载的时候, 却报了一个“Prohibited package name: java.lang”的错。

也就是说JVM在设计的时候就把这些包给设定死了,不允许用这种方式加载。

当然,对于JNDI的加载,线程上下文classloader还是非常有用的。

看来加载机制这里是没什么搞头了。。。
2 楼 mabusyao 2011-03-02  
呵呵,继承这条路我也考虑过了,java继承因为要遵循替换原则,所以子类没有办法降低父类的方法访问权限。方法覆盖的话,已有的代码需要重写,也会产生问题。
1 楼 aspnetdb 2011-03-01  
关注一下,确实挺难。String是final修饰的,不能继承和所以没法覆盖。
我感觉是不是题意理解错了?

相关推荐

    八数码难题求解

    "八数码难题求解"是一种经典的逻辑谜题,也被称为滑块拼图或15拼图。在这个游戏中,一个3x3的网格包含了1到8的数字和一个空格,目标是通过移动数字来达到预设的目标布局。在这个特定的项目中,开发者使用Visual ...

    摩天大楼:摩天大楼难题求解器

    《摩天大楼:摩天大楼难题求解器》是一款基于C++编程语言开发的逻辑解谜游戏。在这款游戏中,玩家需要解决被称为“摩天大楼”(Skyscrapers)的智力挑战。摩天大楼难题源于经典的数独游戏,但加入了更丰富的视觉元素...

    daa-brutesudoku:[Java]强力算法数独难题求解器

    可调整大小的数独难题求解器,使用迭代蛮力算法,该算法将包含难题尺寸的文本文件作为输入,然后将数独难题本身添加为未解决的“空”正方形中的零,并迭代找到解决方案。 ,然后打印解决方案以及运行时。 由Andrea...

    8PuzzleSolver:使用堆(优先级队列)和A *搜索算法的8难题求解器

    8拼图解算器使用堆(优先级队列)和A *搜索算法的8难题求解器该项目是普林斯顿大学Coursera的Algorithms I课程的一部分。 完整的作业规范可以在以下位置找到: : 8-puzzle是一款经典游戏,其中将图块1-8放置在3 x 3...

    sudoku_9_to_36:Perl难题求解器

    Perl难题求解器 输入大小:9x9字符1-9 16x16字符AP 25x25字符AY 36x36字符0-9,AZ 36x36网格适用于的当前字符集 要获得一种解决方案:./solve.plx 16x16_three_solutions 要获得每个解决方案,请使用“ -a”:./...

    SudokuSolver:使用BackTracking算法的数独难题求解器

    这个项目名为"SudokuSolver",它是一个基于Python实现的数独难题求解器,采用了回溯(BackTracking)算法来解决复杂的数独问题。 回溯算法是一种试探性的解决问题的方法,它尝试分步地找出问题的所有可能解决方案,...

    daa-backtrackSudoku:[Java]递归回溯数独难题求解器

    在这个项目中,我们将深入探讨如何使用Java编程语言实现一个基于递归回溯算法的数独难题求解器。递归回溯是一种在搜索解决方案时,如果当前路径无法得出正确结果,则回溯到上一步并尝试其他可能性的方法。 首先,...

    8-Puzzle:具有DFS,BFS,IDS,UCS,A *,IDA *,带有线性冲突水平函数的双向A *策略的8难题求解器

    8拼图具有DFS,BFS,IDS,UCS,A *,IDA *,双向A *策略的8难题求解器,具有线性冲突水平函数。跑主要类是Puzzle.java,此文件中有一些初始状态的实例。 该文件中也有一个目标状态。8-拼图实例简单实例从1移到10 int...

    八数码难题解决 源码

    八数码难题,也被称为滑动拼图或15拼图,是一种经典的逻辑谜题,源自19世纪。在这个游戏中,玩家需要通过空格移动数字方块,使得它们按照特定的顺序排列。通常,目标是将打乱的1到8的数字方块(加上一个空白方格)...

    A算法求解八数码难题.pdf

    #### A*算法求解过程 1. **初始化**:设置开放列表(Open list)和关闭列表(Closed list),并将起始节点加入开放列表。 2. **循环执行**: - 从未访问的节点中选取f值最小的节点作为当前节点。 - 将当前节点移...

    river-crossing-puzzle-solver:渡河难题求解器

    最初的难题假设所有人最初都在河的左侧,但是求解器可以求解任何给定的初始配置。 筏子一次最多只能搭载2人,只有母亲,父亲和警察知道如何操纵筏子。 如果没有母亲在场,父亲在处理女儿方面会遇到麻烦,同样,在...

    八数码难题

    给定的代码片段是使用Java实现的一个八数码难题求解程序,主要采用深度优先搜索算法来寻找解。 ##### 2.1 主类 `test` 主类`test`定义了初始状态和目标状态,并且执行了深度优先搜索算法。 - **成员变量**: - `...

    八数码难题 C++编程

    在IT领域,八数码难题...通过以上步骤,我们可以用C++实现一个完整的八数码难题求解器。这个程序不仅锻炼了编程技巧,也体现了算法设计和问题解决能力。对于学习和理解C++以及算法应用来说,这是一个很好的实践项目。

    汉尼塔求解器:用三种语言编写的TOH难题求解器,仅是算法

    这个求解器的独特之处在于它支持三种不同的编程语言,这可能是C#、Python、Java或其他流行的编程语言。C#标签表明至少其中一种实现是用C#编写的,这是一种现代、面向对象的编程语言,广泛应用于Windows平台的软件...

    使用Python和PyGame的A *算法进行8难题求解

    8难题,又称滑块谜题或15拼图,是一个经典的逻辑游戏,玩家需要通过滑动方块在空格上移动,最终将打乱的数字排列成预设的顺序。A*(A star)算法是一种广泛应用的路径搜索算法,尤其适用于解决这类问题。在这个场景...

    八数码难题——Python代码求解

    八数码难题,又称滑动拼图游戏,是一个经典的逻辑谜题。在这个游戏中,玩家需要通过移动数字方块,将一个初始的打乱顺序的8个数字方块(以及一个空格)排列成预设的正确顺序。这个压缩包提供的资源包含了解决八数码...

    nth-puzzle-py:CS170(人工智能入门)8难题求解器。 扩展到包括第N个大小的拼图

    它演示了使用A *算法解决第N个大小难题。用法环境搭建建议设置虚拟环境。 $ python3 -m venv venv$ source venv/bin/activate$ pip install pytest运行它设置好环境后,只需调用即可运行求解器$ python3 driver.py...

    sudoku-solver:使用DLX算法的快速数独难题求解器:puzzle_piece:

    在这个案例中,我们关注的是一个名为“sudoku-solver”的项目,它使用了DLX(Dancing Links)算法来高效地求解数独难题。DLX算法是由日本数学家和程序员Hakuo Okada发明的,它是基于一种称为"Exact Cover"问题的解决...

    A*算法求解N码难题+Word分析说明

    在A*算法求解N码难题的过程中,每个可能的拼图状态被视为一个节点,相邻的状态(即通过移动一块拼图可以达到的状态)形成边。启发式函数h(n)常常选用曼哈顿距离或者汉明距离,这两个都是衡量当前状态与目标状态之间...

    8-puzzle:带有A *搜索算法的8难题求解器!

    跑步: 通过在Windows上按SHIFT + RIGHT按钮或在Linux上打开Terminal,打开dist/目录上的Command Prompt / PowerShell / Terminal,然后键入以下任意项ENTER : java -jar 8-puzzle.jar 1用于汉明 ...

Global site tag (gtag.js) - Google Analytics