インスタンスを生成するには
C++ 2013/09/09
new
演算子を使う。
HogeClass hoge = new HogeClass();
引数はコンストラクタに渡されるので、コンストラクタの引数型に合わせて、
new
演算子に引数を渡す必要がある。
Java 2016/06/30
new
演算子を使う。
HogeClass hoge = new HogeClass(arg1, arg2);
引数はコンストラクタに渡されるので、コンストラクタの引数型に合わせて、
()
の中に引数を渡す必要がある。
Scala 2016/06/30
Javaと同様に new
演算子を使う。
val foo = new FooClass(arg1, arg2);
コンストラクタに引数がない場合は ()
を省略できる。
val foo = new FooClass();
val foo = new FooClass;
case classに関してはnew
を省略できる。
val bar = BarCaseClass(arg1, arg2);
Scalaでは、apply
というメソッドがあるオブジェクトは、それ自体が関数であるかのように後ろにカッコで引数を置くことで、apply
メソッドを呼び出すことができ、
case classではコンパニオンオブジェクトにインスタンスを生成するapply
メソッドがあるので、
new
を省略できるのである。上の例で言うと BarCaseClass.apply
というメソッドが存在する。
BarCaseClass(arg1, arg2)
という表記は、 new BarCaseClass(arg1, arg2)
の省略形ではなく、
BarCaseClass.apply(arg1, arg2)
の省略形である。
Ruby 2014/11/29
new
というクラスメソッドを使う。
hoge = HogeClass.new
initialize
メソッドに引数があれば、new
メソッドに引数を渡す。
hoge = HogeClass.new(arg1, arg2)
JRuby 2014/12/13
JRubyはRubyと同じで、new
というクラスメソッドを使う。
Javaのクラスのインスタンスを生成する場合にもnew
メソッドを使う。
Javaのクラスに new
というクラスメソッドがあるかのように振る舞うが、実際にはJavaのnew
演算子と同じ動作になる。
JavaのStringインスタンスを無理やり生成する例
require 'java'
str = java.lang.String.new("abc")
p str
# => #<Java::JavaLang::String:0x1367d679>