Java 如何使用依赖于未实现接口的ProGuard收缩代码

Java 如何使用依赖于未实现接口的ProGuard收缩代码,java,proguard,Java,Proguard,我有一个有很多方法的类。每个方法都在对象集合上执行循环,并在实现接口时调用该对象上的特定方法 我试图以这样一种方式来编写代码,即proguard将删除使用接口而不使用任何实现类的方法 我尝试过在集合上使用两种类型的循环,在这两种情况下,ProGuard都成功地删除了使用接口但没有实现的代码,但留下了一个空循环 根据我的代码: 原始代码 如果没有实现HandlerHappy接口的类,我希望proguard删除notifyHappy方法;如果没有实现HandlerSad接口的类,我希望proguar

我有一个有很多方法的类。每个方法都在对象集合上执行循环,并在实现接口时调用该对象上的特定方法

我试图以这样一种方式来编写代码,即proguard将删除使用接口而不使用任何实现类的方法

我尝试过在集合上使用两种类型的循环,在这两种情况下,ProGuard都成功地删除了使用接口但没有实现的代码,但留下了一个空循环

根据我的代码:

原始代码


如果没有实现HandlerHappy接口的类,我希望proguard删除notifyHappy方法;如果没有实现HandlerSad接口的类,我希望proguard删除notifySad方法。

您希望未实现的接口由包外部的一方实现吗

如果没有,那么为什么还没有实现接口呢?
如果是,如果让PG优化该方法的调用,任何人这样做有什么意义?

我确实希望第三方实现接口,但第三方也将运行proguard。我希望使生成的代码尽可能地最小化和优化。第三部分将只实现部分接口。
public class EventBus {

    private ArrayList<Handler> handlers = new ArrayList<Handler>();

    public void notifyHappy() {
        for (Handler handler: handlers) {
            if (handler instanceof HandlerHappy) {
                ((HandlerHappy) handler).notifyHappy();
            }
        }
    }

    public void notifySad() {
        final int size = handlers.size();
        for (int i=0; i<size; i++) {
            Handler handler = handlers.get(i);
            if (handler instanceof HandlerSad) {
                ((HandlerSad) handler).notifySad();
            }
        }
    }

}
public final class a {
    private ArrayList a = new ArrayList();

    public final void a() {
        Iterator localIterator = this.a.iterator();
        while (localIterator.hasNext())
            localIterator.next();
    }

    public final void b() {
        int i = this.a.size();
        for (int j = 0; j < i; j++)
            ;
    }
}
-assumenosideeffects class java.util.ArrayList { 
    public *** get(int); 
    public int size();
}

# disabled merging to produce clear output, doesn't affect the shrinking
-optimizations !class/merging/*,!method/inlining/*