我一直在研究代理类,但我不明白设计它的全部想法。
据我所知,到目前为止,它是一个包装对象,可以控制对原始对象的访问。但如果我们想控制它,为什么我们不能设计具有这些访问机制的原始类呢?
我读到这些代理对象对于跟踪方法调用、将方法调用路由到远程服务器非常有用。
但我搜索了一个可以用java向我解释这一点的问题,但我没有找到任何问题。
我将说明我所引用的书中的方法跟踪程序的代码。
public class ProxyTest {
public static void main(String[] args) throws ClassNotFoundException {
var elements = new Object[1000];
// fill elements with proxies for the integers 1 . . . 1000
for (int i = 0; i < elements.length; i++) {
Integer value = i + 1;
var handler = new TraceHandler(value);
Object proxy = Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Comparable.class}, handler);
elements[i] = proxy;
}
// construct a random integer
Integer key = new Random().nextInt(elements.length) + 1;
// …Run Code Online (Sandbox Code Playgroud) 我有一个 generator对象可以检查列表中的某个条件。这个程序适用于我的所有情况。
但我只想澄清一些关键点。
在我的程序中每当generator yield值'No'或'Done'控制迭代停止并调用generator使用另一个参数调用时。
这可能是一个愚蠢的问题,无论如何,只要generator对象被让出并且我们停止在它旁边调用,该对象是否已被垃圾收集解决?或者当我们调用它时,产生的对象是否正在被垃圾收集generator用另一个参数再次。
请向我澄清generator如果我们在对象next()引发StopIteration异常之前停止调用它会发生什么。generator当我们再次使用新参数调用生成器时,当前对象的持久执行点和变量会发生什么变化。