インスタンスを生成するには

C++

new 演算子を使う。

HogeClass hoge = new HogeClass();

引数はコンストラクタに渡されるので、コンストラクタの引数型に合わせて、 new演算子に引数を渡す必要がある。

Java

new 演算子を使う。

HogeClass hoge = new HogeClass(arg1, arg2);

引数はコンストラクタに渡されるので、コンストラクタの引数型に合わせて、 () の中に引数を渡す必要がある。

Scala

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

new というクラスメソッドを使う。

hoge = HogeClass.new

initializeメソッドに引数があれば、newメソッドに引数を渡す。

hoge = HogeClass.new(arg1, arg2)

JRuby

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>
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。