java - 字节码:LOOKUPSWITCH 和 TABLESWITCH

标签 java bytecode bytecode-manipulation bcel

我目前正在使用 BCEL 检测字节码。在 BCEL API 中,LOOKUPSWITCHTABLESWITCH 这两种指令类型(package org.apache.bcel.generic)正在实现接口(interface) StackProducer 。我知道这两条指令会弹出操作数堆栈(即使用它)并且不会在堆栈上产生任何内容,那么它们如何实现 StackProducer 而不是 StackConsumer 呢?这是一个错误吗?谢谢

(ps:我试图在 BCEL 邮件列表上发布这个问题,但没有得到答复。我希望我能在这里找到更多的运气)

最佳答案

它是 a bug .不过现在已经修复了。

tree:generic jbevain$ svn log -c 1081190 && svn diff -c 1081190
------------------------------------------------------------------------
r1081190 | dbrosius | 2011-03-13 19:41:20 +0100 (Sun, 13 Mar 2011) | 1 line

Bug 48908 - Select instructions should implement StackConsumer instead of StackProducer
------------------------------------------------------------------------
Index: Select.java
===================================================================
--- Select.java (revision 1081189)
+++ Select.java (revision 1081190)
@@ -33,7 +33,7 @@
  * @see InstructionList
  */
 public abstract class Select extends BranchInstruction implements VariableLengthInstruction,
-        StackProducer {
+        StackConsumer {

     private static final long serialVersionUID = 2806771744559217250L;
     protected int[] match; // matches, i.e., case 1: ...

SelectLOOKUPSWITCHTABLESWITCH 的基类。

关于java - 字节码:LOOKUPSWITCH 和 TABLESWITCH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2382682/

相关文章:

java - 带接口(interface)的 EJB 依赖注入(inject)

java - 条件查询组合和谓词和或谓词在where方法中

java - 在本地禁用 Spring Cloud Kubernetes

java - 为什么 OpenJDK 将私有(private)方法放入 vtable 中?

java - 如何优化外部 Java 库的资源使用?

java - 如何在运行时复制 Java 类?

java - 解析 TypeVariable

java - 如何更改eclipse热键?

javassist 与 Glassfish - javassist.NotFoundException - springframework 中的检测类失败

java - 使用 OSGi 时是否可以进行字节码操作?