gpt4 book ai didi

java - 创建一个无操作 IncallingHandler

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:19 25 4
gpt4 key购买 nike

我正在尝试使用 Java 的 InvocationHandlerProxy 类创建一个无操作“监听器”。我不太确定下面的实现是否能够处理所有场景,也不确定它是否是最佳解决方案。我真正希望的是这个类没有任何效果。有没有比下面更好的方式来表达这个概念?

public class EmptyListener {
public static <T> T createEmptyListenerFor(Class<T> aInterface) throws Exception {
return (T) Proxy.newProxyInstance(aInterface.getClassLoader(), new Class[] { aInterface }, new EmptyInvocationHandler());
}

private static class EmptyInvocationHandler implements InvocationHandler {
public EmptyInvocationHandler() {}
@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Class<?> returnType = method.getReturnType();
if (returnType.isPrimitive()) {
if (returnType.equals(boolean.class)) {
return false;
} else if (returnType.equals(void.class)) {
return null;
} else if ( returnType.equals(byte.class)) {
return (byte)0;
} else if ( returnType.equals(short.class)) {
return (short)0;
} else if ( returnType.equals(int.class)) {
return 0;
} else if ( returnType.equals(long.class)) {
return 0l;
} else if ( returnType.equals(float.class)) {
return 0f;
} else if ( returnType.equals(double.class)) {
return 0d;
} else if ( returnType.equals(char.class)) {
return '\u0000';
}
}
return null;
}
}

也许我在这里叫错了树。同样,这旨在成为创建代理、占位符或 Null objects 的简单方法。 ,在监听器接口(interface)初始化时。这里的想法是,可以注入(inject)此监听器并防止意外调用 null 引用。有没有更好的方法来完成我在这里想做的事情?或者有人在我不知道的开源项目中写过类似的东西?我知道 Guava 的 Optional 但这并不是我真正想要的。

最佳答案

根据上下文,这可能会产生很高的成本,因为这可能无法被 JVM 内联。如果您在 Java 服务器上执行此操作,内联将很重要,而永久生成大小则无关紧要,但如果您在 Android 上执行此操作,内联可能并不重要,但永久生成大小(或者更确切地说,所有这些无用的空实现所产生的所有冗余方法)将很重要。

如果这是在 Java 服务器上,您可能可以编写一个注释处理器,它可以自动生成您可能需要的所有空实现。

但是,我只是在各处使用 @Nonnull 注释,并在使用前强制进行 null 检查。

关于java - 创建一个无操作 IncallingHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36089507/

25 4 0
文章推荐: java - 为什么子列表不适用于 List