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