草庐IT

弱引用

全部标签

java - 列表对象引用在 Java 循环期间更改

我找不到关于此的任何主题。我想知道在如下所示的循环中更改列表类的引用是否安全:TreeminimalTree=someTree;for(Treest:minimalTree.getSubtrees()){if(condition)minimalTree=st;}迭代器是否会重置并为新引用重新启动?编辑:我忘了说:这段代码适用于我想缩小树中元素搜索范围的情况,比方说,包含某些元素的较小的树。在这种情况下,继续只查找“min​​imalTree”的内部结构而不是整个“someTree”结构会更快。 最佳答案 不,迭代不会被重置。根据JL

java - 匿名内部类在访问其原语等时是否总是捕获对 "this"(外部)对象的引用?

如果我有[编辑:添加了“Inner”的类型定义]interfaceInner{publicvoidexecute();}classOuter{intouterInt;publicvoidhello(){Innerinner=newInner(){publicvoidexecute(){outerInt=5;}}//laterinner.execute();}}调用inner.execute()会将那个特定Outer对象的outerInt变量设置为5,无论从何处调用,只要Inner对象存在?或者它只会更改outerInt变量的副本而不影响原始Outer对象?

java - 按引用/值传递 - 简单示例

我知道这个问题已经解决了很多次-但我的Java/C++知识太薄弱了,我几乎无法理解答案:-(...我真正想要的只是一个super简单的例子。在C++中,我可以编写以下内容:voidfunc(){intx=3;add_one(x);//nowxis4.}voidadd_one(int&var){var++;}我现在想看到的是用java实现同样效果的最简单的方法。 最佳答案 你不能直接。最接近的方法是将值放在一个对象中,然后将引用(按值,因此引用被复制)传递到方法中。voidfunc(){intx=3;int[]holder=[x];a

java - 为什么我不能在泛型类上静态引用内部类的静态方法?

请完成整个问题以获得完整的想法。先让类(class)Box给出如下:-publicclassBox{privateTt;publicvoidset(Tt){this.t=t;System.out.println("value:\n");System.out.printf("%s",t.toString());}publicTget(){returnt;}staticintretInt(){return5;}publicvoidinspect(Uu){System.out.println("T:"+t.getClass().getName());System.out.println("U

java - 初始化程序对静态字段的非法引用

我是java中枚举的新手,我很困惑为什么这段代码编译得很好enumScale5{GOOD(),BETTER(),BEST();staticScale5s=GOOD;}但是这段代码失败了:enumScale5{GOOD(),BETTER(),BEST();Scale5s=GOOD;}我收到错误:初始化程序对静态字段的非法引用。我不明白原因。我在枚举方面相对缺乏经验,所以请把它转给我。非常感谢!这里问的问题Cannotrefertothestaticenumfieldwithinaninitializer?与我所问的完全相反。在我的例子中,将s声明为静态可以很好地编译代码。

java - 如何更改通过引用传递给 Mockito 中的模拟的对象

给定以下代码@MockClientclient;ByteArrayOutputStreambaos=newByteArrayOutputStream();client.retrieveFile(baos);//clientissupposedtofillboaswithdata如何指示Mockito填充baos对象? 最佳答案 您可以使用MockitosAnswer.doAnswer(newAnswer(){@OverridepublicObjectanswer(InvocationOnMockinvocation){Object[

java - 对 javadoc 中方法参数的可重构引用

如何在javadoc中引用方法参数,以便重构引用?例如:publicclassA{privateintfield;/***@paramp*{@link#field}isinitializedusingthevalueofp.*/voidfoo(intp){//...}}如果我重命名上面代码中的参数p,我想要"...usingthevalueofp"相应更改的文本(就像重命名字段会更改{@link#field}一样)。我读了this旧帖子和更多资源,但找不到解决方法。javadoc支持吗? 最佳答案 由于Java删除,方法参数名称是短

JAR 中的 Java Desktop.open(File f) 引用文件?

Desktop.open(Filef)可以引用位于JAR中的文件吗?我尝试使用ClassLoader.getResource(Strings),将其转换为URI,然后从中创建文件。但这会导致IllegalArgumentException:URIisnothierarchical。URLurl=ClassLoader.getSystemClassLoader().getResource(...);System.out.println("url="+url);//urlisvalidDesktop.getDesktop().open(newFile(url.toURI()));一种可能性

java - 什么时候在 switch 语句中声明引用?

令我惊讶的是这段代码工作正常:inti=2;switch(i){case1:StringmyString="foo";break;case2:myString="poo";System.out.println(myString);}但是字符串引用不应该被声明?会不会是无论如何总是声明每种情况下的所有变量,或者这是如何解决的? 最佳答案 嗯,这是关于括号(即范围)的。可以说,更好的做法是像这样编写语句:inti=2;switch(i){case1:{StringmyString="foo";break;}case2:{myString

java - 缓存远程 EJB 3.0 引用

我在想如何才能节省通过jndi查找远程ejb引用的时间。我有一个应用程序需要非常快地运行,但它还必须调用远程ejb,这会减慢它的速度。所以我的解决方案是这样的:我采用了apachecommons-pool库并将其StackObjectPool实现用于我的远程ejb引用缓存。privatestaticfinalObjectPoolpool=newStackObjectPool(newRemoteEjbFactory());工厂看起来像这样:publicstaticclassRemoteEjbFactoryextendsBasePoolableObjectFactory{@Override