簡體   English   中英

使用“ private [this] lazy val”是否有意義?

[英]Does it make sense to use “private[this] lazy val”?

我了解為什么這樣做有用
private[this] val xx = 3
https://github.com/databricks/scala-style-guide#privatethis所述

lazy val一樣嗎?
Q1。 private[this] lazy val xx = 3
private val xx = 3快?

Q2。 def f(i: Int) = i
private[this] lazy val xx = f(3)
private val xx = f(3)快?

否。對於private lazy val x= 3private[this] lazy val =3的類,生成的類是相同的,說明如下。

private lazy val

public class LazyValTest
{
  private int bar;
  private volatile boolean bitmap$0;

  private int bar$lzycompute()
  {
    synchronized (this) { if (!this.bitmap$0) { this.bar = 3; this.bitmap$0 = true; } return this.bar; }  } 
  private int bar() { return this.bitmap$0 ? this.bar : bar$lzycompute();
  }
}

使用private和private [this] val生成的類略有不同。

private val

public class PrivateValTest
{
  private final int bar = 3;

  private int bar() { return this.bar; }
}

private[this] val

public class PrivateThisValTest
{
  private final int bar = 3;
}

否-惰性val始終被編碼為具有后備字段的方法,因此如果您使值成為惰性,則是否 private[this]或不private[this]您將始終支付訪問器的費用 JIT編譯器可能稍后會意識到它可以內聯(在第一次加載之后)后備字段訪問,但是您引用的樣式指南似乎集中在性能保證上,並且這種內聯現在似乎還不能保證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM