Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala与Java的等价物是什么;什么是静态块?(无伴星)_Java_Scala_Apache Spark_Classloader_Static Block - Fatal编程技术网

Scala与Java的等价物是什么;什么是静态块?(无伴星)

Scala与Java的等价物是什么;什么是静态块?(无伴星),java,scala,apache-spark,classloader,static-block,Java,Scala,Apache Spark,Classloader,Static Block,scala是否有类似于java中类加载器对静态块所做的事情 例如,在scala中类似于以下内容: class A{ static{ System.out.println("This gets called at the time of loading a class by class loader.") } } 我将Scala2.x与ApacheSpark2.x一起使用 PS:我已经阅读了这个答案,但我不想创建伴随对象,然后通过类的构造函数调用它 编辑:[我的用例] 考虑一个java场景,我

scala是否有类似于java中类加载器对静态块所做的事情

例如,在scala中类似于以下内容:

class A{
static{

System.out.println("This gets called at the time of loading a class by class loader.")
}
}
我将Scala2.x与ApacheSpark2.x一起使用

PS:我已经阅读了这个答案,但我不想创建伴随对象,然后通过类的构造函数调用它

编辑:[我的用例]


考虑一个java场景,我们在静态块中编写Class.forName(“some.jdbc.driver”),然后将jdbc驱动程序放在类路径中。在该类装入器装入我们提到的类之后。我想做一些与编辑完全一样的事情:没有人给我带来太多希望,所以这里有一个链接。已经是了

但是,成员是在同伴上定义的。成员定义的RHS可以包含任意代码,因此静态初始值设定项本身不需要语法

仍然想知道用例是什么

您的用例是什么

通常:

scala 2.13.0-M4> object X { println("hi") }
defined object X

scala 2.13.0-M4> X
hi
res0: X.type = X$@554c4eaa

scala 2.13.0-M4> :javap -c X
Compiled from "<console>"
public class $line3.$read$$iw$$iw$X$ {
  public static $line3.$read$$iw$$iw$X$ MODULE$;

  public static {};
    Code:
       0: new           #2                  // class $line3/$read$$iw$$iw$X$
       3: invokespecial #20                 // Method "<init>":()V
       6: return

  public $line3.$read$$iw$$iw$X$();
    Code:
       0: aload_0
       1: invokespecial #21                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: putstatic     #23                 // Field MODULE$:L$line3/$read$$iw$$iw$X$;
       8: getstatic     #28                 // Field scala/Predef$.MODULE$:Lscala/Predef$;
      11: ldc           #30                 // String hi
      13: invokevirtual #34                 // Method scala/Predef$.println:(Ljava/lang/Object;)V
      16: return
}

编辑:没有人给我们带来太多希望,所以这里有一个链接。已经是了

但是,成员是在同伴上定义的。成员定义的RHS可以包含任意代码,因此静态初始值设定项本身不需要语法

仍然想知道用例是什么

您的用例是什么

通常:

scala 2.13.0-M4> object X { println("hi") }
defined object X

scala 2.13.0-M4> X
hi
res0: X.type = X$@554c4eaa

scala 2.13.0-M4> :javap -c X
Compiled from "<console>"
public class $line3.$read$$iw$$iw$X$ {
  public static $line3.$read$$iw$$iw$X$ MODULE$;

  public static {};
    Code:
       0: new           #2                  // class $line3/$read$$iw$$iw$X$
       3: invokespecial #20                 // Method "<init>":()V
       6: return

  public $line3.$read$$iw$$iw$X$();
    Code:
       0: aload_0
       1: invokespecial #21                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: putstatic     #23                 // Field MODULE$:L$line3/$read$$iw$$iw$X$;
       8: getstatic     #28                 // Field scala/Predef$.MODULE$:Lscala/Predef$;
      11: ldc           #30                 // String hi
      13: invokevirtual #34                 // Method scala/Predef$.println:(Ljava/lang/Object;)V
      16: return
}

我认为你提到的答案是你能得到的唯一答案

如果您有下面这样的代码,您仍然需要引用该对象 以某种方式运行init代码

object StaticBlock {
  println("init")
}
在Java中也是如此:除非
加载该类时,该类中的静态块不会执行。

我认为您引用的答案是您将得到的唯一答案

如果您有下面这样的代码,您仍然需要引用该对象 以某种方式运行init代码

object StaticBlock {
  println("init")
}
在Java中也是如此:除非
加载该类时,不会执行该类中的静态块。

不,您链接的答案是Scala拥有的最接近的等效值。为什么不在companion中使用它?@cchantep,因为这样您就需要执行类似的
对象测试{classa{A};对象A{println(“A.init”)}
我不想这样做。请从类加载器的角度来看上述问题。这是一种习惯,而不是技术要求,因为对象回答了问题question@cchantep对象不能回答这个问题。我想把一些东西放在静态块中,它可以在一个类一个类地加载时执行。不,你链接的答案是Scala最接近的等价物。为什么不把它放在companion中?@cchantep,因为你需要这样做
对象测试{classa{a};对象a{println(“a.init”)}
我不想那样做。请从类加载器的角度来看上述问题。这是一种习惯,而不是技术要求,因为对象回答了问题question@cchantep对象不能回答这个问题。我想在静态块中放置一些东西,可以在加载一个类一个类装入器时执行。考虑到java的一个场景,我们在静态块中放置class.forName(“some.jdbc.driver”),而jdbc驱动程序在类路径中。在类装入器装入我们提到的类之后。我想做一些完全一样的事情。所以你的答案无关紧要。BTW THNX指出SIP。我忘了提到我正在做SARK-ASPITED。考虑一个java的场景,我们把class .FordNew(“J.BDB.Wrand”)放在静态块中,JDBC驱动程序在类路径中。在这个类加载器加载了我们提到的类之后。我想做一些完全一样的事情。所以你的答案无关紧要。顺便说一句,我忘了说我正在做spark submit。