草庐IT

可变性

全部标签

java - 为什么一个采用可变参数的方法只有在它是静态的情况下才能被优化为一系列单态调用?

在vJUG24,其中一个主题是JVMperformance.可以找到幻灯片here.他有一个例子:staticvoidlog(Object...args){for(Objectarg:args){System.out.println(arg);}}这是通过调用的(不能完全正确地阅读幻灯片,但它是相似的):voiddoSomething(){log("foo",4,newObject());}他说因为是静态方法,可以这样内联优化:voiddoSomething(){System.out.println("foo");System.out.println(newInteger(4).toS

java - 如何在 Java 中构建复杂的、分层的不可变数据结构?

我正在为客户构建一个Java库,他们想要的其中一件事是他们使用的一组特定标准的数据表示。我不想透露客户的兴趣,但如果他是炼金术士,他可能想要以下内容:ElementsFireName="Fire"PhysicalTemperature=451Color="Orange"MagicalDomain="Strength"WaterName="Water"PhysicalColor="Blue"EarthName="Earth"MagicalDomain="Stability"Ordinality=1我需要能够通过名称访问各种数据元素,例如:Elements.Earth.NameElemen

java - 如何对不可变类实例之间的循环建模?

不可变类很棒,但有一个大问题我想不出一种合理的方法来解决-循环。classFriend{Setfriends();}一个人如何模拟我有你作为friend,而我又有我作为friend?不变性这个来自外界的类肯定是​​不可变的。为了进行相等性检查,内部保存的值应该保持不变。 最佳答案 [[[编辑:添加代码以演示完全不可变的概念]]]这就是构建器非常适合不可变对象(immutable对象)的原因-它们允许在构建过程中使用可变性,以便在您“卡住”它之前设置好所有内容。在这种情况下,我猜你需要一个支持创建循环的friend生成器。finalF

java - 在 Java 6 和 7 中处理安全可变参数,需要说明

JDK在处理安全变量参数方面的主要区别是什么?以上在JDK1.6中发出警告-Typesafety:AgenericarrayofListiscreatedforavarargsparameter为什么会在此处看到此警告?JDK1.7做了什么来抑制它?请帮助我理解。 最佳答案 JDK7添加了@SafeVarargsannotation注意通用可变参数何时真正安全,并将该注释应用于例如Collections.addAll。 关于java-在Java6和7中处理安全可变参数,需要说明,我们在S

java - 返回对存储在对象字段之一中的可变对象值的引用会暴露对象的内部表示

在我的代码中为以下几行运行checkstyle时出现此错误:@OverridepublicString[]getDescriptions(){returnDESCRIPTIONS;}但描述不是可变的。它被定义为:privatestaticfinalString[]DESCRIPTIONS=newString[NUM_COLUMNS];static{//Inaloopassignvaluestothearray.for(inti=0;i这是完整的错误信息:"Returningareferencetoamutableobjectvaluestoredinoneoftheobject'sfi

java - 使用 jbcrypt 时性能可变且性能下降

我正在使用jbcrypt对项目中的密码进行哈希处理。在我使用的硬件上验证密码时,性能约为500毫秒(log_rounds设置为12)。然而,在正常使用一段时间后,性能时间突然下降到惊人的15秒。下降非常突然,没有累积,并且在过程重新启动之前保持不变。分析显示额外的时间用在了key(..)方法中。来源:http://jbcrypt.googlecode.com/svn/tags/jbcrypt-0.3m/src/main/java/org/mindrot/jbcrypt/BCrypt.java该方法仅使用xor、and、shift等基本函数计算哈希,没有对象分配、外部资源使用、随机数生成

java - Java 字符串并非真正不可变的含义是什么?

背景在Java101中,我们被教导:AStringisimmutable.是的。好的。谢谢。然后我们进入Java102(或者Java201),我们发现:AStringisn'treallyimmutable:youcanchangeitusingreflection.啊。美好的。要么很可爱,要么非常反常,这取决于你的观点。到目前为止,这些东西已经discussedadinfinitum在StackOverflow和其他地方。在提出这个问题时,我认为这是理所当然的。我有兴趣问的是:问题OncewediscoverthataStringisn'treallyimmutable,whatar

Java:当 super 的参数是可变参数时,如何要求子类调用 super()

我有一个抽象类,它有一个采用可变参数的构造函数。Java编译器似乎并不要求子类调用super(),即使每个构造函数都有参数。publicabstractclassParent{publicParent(String...varargs){}}publicclassChildextendsParent{//Iwouldlikethistobeacompileerror.Childshouldalwayscallsuper().}如何编写Parent以便子级必须调用super()? 最佳答案 varargs方法的目的是允许程序员单独编写

可变日期的 Java 8 时间

我似乎无法使用可变空格来解析我的日期。DateTimeFormatterformatter=DateTimeFormatter.ofPattern("EEEMMMdHH:mm:ssyyyy");LocalDateTimedateTime=LocalDateTime.parse(date,formatter);这是我必须接受的格式SatJul208:52:132016SatJul1208:52:132016如果我将格式化程序更改为下面,我可以让顶部通过,但它会以2位数字中断EEEMMMdHH:mm:ssyyyy 最佳答案 您可以为您的

java - 依赖注入(inject)、初始化后的不变性

我希望能够指定一个对象的成员变量在对象被“初始化”后是不可变的,这对我来说意味着在它被注入(inject)任何依赖项之后,并且已经执行了它所需要的任何其他初始化操作只能在DI之后执行。是否有满足我兴趣的语言-以这种方式形式化DI、初始化并支持不变性?使它们成为语言的一部分也许是愚蠢的;也许不吧。我不确定。今天我用Java编程,但我不能像我想的那样经常使用“final”,因为这些阶段发生在构造函数完成执行之后。关于如何使用Java获得我想要的东西的任何建议?我想我可以让我的对象实现一个基类,以便这些阶段在构造函数完成之前发生,或者使用方面来做同样的事情。想法?