2017-12-12 11 views
0

Javaのような数学は、UtilクラスのようにKotlinで作成できます。だから私はMath.add()のようなものを呼び出すことができます。 コンパニオンオブジェクトを使用しようとしています。別の方法があれば教えてください。Java MathのようなクラスのKotlin

+0

トップレベルの機能を使用することを検討してください上記の2つの方法の中で明示的なクラス – voddan

答えて

5

あなたはちょうどその構文を達成するために、単純なobject declarationを使用することができます。

object Math { 
    fun add(x: Int, y: Int) = x + y 
} 

これは、実行時に1つのだけのインスタンスと、シングルトンクラスを作成し、あなたはMath.add(1, 4)構文で、このインスタンスのメソッドを呼び出すことができます。


コンパニオンオブジェクトは、同様に、Javaの静的関数に、コンテナクラスの識別子を介してアクセスでき、そのメンバーで、クラスの中にネストされたこれらのobject宣言の単なる特殊なケースです。

実際にクラス内のオブジェクトをネストすることができます。companionキーワードを使用すると、明示的な名前を付けずにオブジェクトを作成できます。名前のネストされたオブジェクトの

例:

class A { 
    fun a() {} 
    object B { 
     fun b() {} 
    } 
    companion object { 
     fun o() {} 
    } 
} 

これらの関数は、このように呼び出すことができます。

A().a()   // this call of course needs an instance of A 
A.B.b() 
A.Companion.o() 
A.o() 
+0

がなくても、私の要件を考えるのに最適です。 – Anil

+1

私はここにコンパニオンオブジェクトが必要ないとは思わないが、通常のものを使うことができる。これらの関数をJavaから呼び出す必要がある場合でも、['@ JvmStatic'](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-jvm-static/)で注釈を付けることができます。ちょうどコンパニオンのように。 – zsmb13

0

はあなたが行うことができます。このような

class Math { 
     companion object { 
      fun add(val x: Int, val y: Int): Int { 
       return x+y 
      } 
      fun subtract(val x: Int, val y: Int): Int { 
       return x-y 
      } 
      fun multiply(val x: Int, val y: Int): Int { 
       return x*y 
      } 
      ... 
     } 
    } 
+0

このオブジェクトを別のクラスに配置する利点は何ですか?それ自身では動作しませんか? – voddan

+0

それは確かに独自に働くことができます:) – zsmb13

+0

Math.add()のためにMathクラスの中に置かれている理由は他にもあります。 –

関連する問題