草庐IT

弱引用

全部标签

java - Java 8 中对本地类构造函数的方法引用如何工作?

下面是无法在Java8(1.8.0_40)中编译但在Eclipse4.4JDT独立编译器(Bundle-Version:3.10.0.v20140604-1726)中编译并成功运行的示例代码:importjava.util.Arrays;importorg.junit.Test;importstaticorg.junit.Assert.assertEquals;/***Testmethodreferencestolocalclassconstructors.*/publicclassLocalClassTest{publiclongsumOfLengths(String[]input)

java - 澄清 StringBuilder 引用和方法执行顺序

这段代码StringBuilderb1=newStringBuilder("hello");b1.append(b1.append("!"));System.out.println("b1="+b1);将打印b1=hello!hello!因为内部的append先被执行并修改了对象b1;然后对外部b1求值(现在它等于hello!)并将相同的字符串附加到它。所以执行内部表达式原始对象被修改外部表达式在修改后的对象上执行但是现在,为什么这段代码会抛出NullPointerException?StringBuilders1=null;StringBuilders2=newStringBuild

java - 插入到 ArrayList 的中间是移动对象还是引用?

将一个元素添加到JavaArrayList的末尾应该花费O(1)时间。然而,向中间添加一个元素必须将右半部分移动一个以维持顺序。这应该花费O(n)时间(实际上O(n/2)简化为O(n))。我的问题是:在原始内存中,这种移位是移动驻留在ArrayList中的对象本身,还是仅仅移动指向它们的引用?无论是哪种,时间复杂度都是一样的,但开销可能大不相同。将一堆巨大的对象移到一边以为中间的一个对象腾出空间可能比仅在内存中移动一些int大小的引用要大得多。所以:它是哪个?我倾向于猜测是引用被移动了,因为JavaList保存对堆上对象的引用,这些对象在内存中可能处于任何“顺序”。我对以上所有内容的表

java - 如果外部类被泛化,则不能从静态上下文中引用“Main.this”

为什么下面的代码没问题,但是一将T作为泛型添加到Main中,就抛出如下错误?'Main.this'cannotbereferencedfromastaticcontext//publicclassMain{-uncommentthisfortheerrortoappearpublicclassMain{publicstaticvoidmain(String[]args){newMain();}classTestNonStatic{}privatestaticclassTestStatic{publicTestStatic(TestNonStaticnonStatic){//thisis

java - RxJava 中的方法引用是如何工作的?

谁能给我解释一下,为什么这里的两个lambdas都可以用方法引用替换?在RxJava中,map()采用Func1类型的参数,其评论指出它“表示具有一个参数的函数”。因此我完全理解为什么valueOf(Object)在这里工作。但是trim()完全不接受参数。那么这究竟是如何工作的呢?Observable.just("").map(s->String.valueOf(s))//lambdas.map(s->s.trim())//.map(String::valueOf)//methodreferences.map(String::trim)//.subscribe();

java - 如何在 Eclipse Helios 中引用另一个项目中的库?

我在代码中引用多个项目时遇到问题。基本上,我们有一个产品,我称之为利维坦。这个项目有很多其他版本,我们在Eclipse中将每个版本都作为单独的项目进行维护。作为开发人员,我们通常会同时在Eclipse中打开多个项目(多个版本),因为我们会接到有关旧版本的帮助热线电话(以及同时开发多个版本)。我们还有测试代码,它在Leviathan的每个发行版的不同项目中。我将我的项目命名为Leviathan_.因此,例如,在我的Eclipse工作区中,我可能有如下项目:Leviathan_scott\(mybranch)Leviathan_9.2\Leviathan_9.3\Leviathan_10.

java - 向类型安全的异构容器中插入对象时,为什么需要类引用?

我正在检查Bloch的EffectiveJava中的异构容器模式,并试图确定为什么在将对象插入异构容器时需要类引用。我不能使用instance.getClass()来获取这个引用吗?不是JPA的entitymanager举个例子?interfaceBlochsHeterogeneousContainer{voidput(Classclazz,Tinstance);Tget(Classclazz);}interfaceAlternativeHeterogeneousContainer{//Classnotneededbecausewecanuseinstance.getClass()vo

java - 为什么包装类对象的标识符不能用作引用变量

我的问题涉及包装类。我知道当我们使用包装类存储原始类型文字时,我们将其存储为该包装类的对象,因此对象的标识符将是一个引用变量(有点像C++中的指针)。例如,在Integerwi=newInteger("56")中,wi是一个引用变量。但如果这是真的:为什么我可以做wi++或wi+=2?为什么编译器像处理普通原始变量一样处理那些引用变量?引用变量不是存储对象的引用吗?给定Integerwi=newInteger("56")和intpi=56,为什么(wi==pi)返回真。wi不是应该存储一个引用(地址)吗?另一个问题:当引用变量作为参数传递给方法时,它算作按引用传递,因此发生的修改该引用

java - 如何在实现接口(interface)但不扩展另一个类的 Java 类中引用 super 方法?

我有几个Java类,它们扩展了通用List接口(interface)的各种实现。他们只是记录添加到列表中的任何内容。LoggingArrayList如下所示。顾名思义,它扩展了ArrayList。LoggingLinkedList类是相同的,只是它扩展了LinkedList。我的主要目标是避免为了使用不同的基类而必须复制所有通用代码。我尽可能地坚持DRY原则(不要重复自己)。首先,请不要提出更好的日志记录方式。那根本不是我真正的应用。这只是演示我遇到的问题的简单方法。我有两个密切相关的问题。第一个是标题中的问题。如何在实现接口(interface)但不扩展另一个类的Java类中引用“s

java:为自定义序列化分配对象引用 ID

出于各种原因,我有一个自定义序列化,我将一些相当简单的对象转储到数据文件中。可能有5-10个类,生成的对象图是非循环的并且非常简单(每个序列化对象都有1或2个对另一个序列化对象的引用)。例如:classFoo{finalprivatelongid;publicFoo(longid,/*otherstuff*/){...}}classBar{finalprivatelongid;finalprivateFoofoo;publicBar(longid,Foofoo,/*otherstuff*/){...}}classBaz{finalprivatelongid;finalprivateLi