今天和同事讨论一道面试题:“是否有办法禁用String的equals方法?”
有两个一下子就能想到的办法:
1,修改源码重新打包。
2,利用类加载器加载一个虚假的类。(此方法如果我没记错的话,应该是不可行的,java虚拟机上有详细介绍)
然后如果不用这两种办法,而是在代码级别是否可以解决呢?
我首先想到的就是是否可以利用String类在JVM中的class对象来解决,其实也就是反射机制。我在Method类里找到了一个setAccessible方法,尝试了下:
结果证明这个方法是不可行的,我查找了些资料,setAccessible其实是设置当JVM做反射时是否做安全检查,而不是该方法是否能够被访问。
我就此郁闷了,想不出还有什么方向可以考虑的。
求帮助。
有两个一下子就能想到的办法:
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做反射时是否做安全检查,而不是该方法是否能够被访问。
我就此郁闷了,想不出还有什么方向可以考虑的。
求帮助。