2017-11-23 6 views
-4
class Array { 
    public static int MAX_SIZE = 42; 
} 
Array arr = new Array(); 
int size = Array.MAX_SIZE; 

そこで、我々はクラスArrayのオブジェクトを作成することができますし、我々はまた、クラスArrayの性質を持っています。 Goでこのコードと同等のものは何ですか?等価のJavaの静的プロパティ

+0

。 – Flimzy

+0

定数やクラス変数について質問していますか? –

+0

クラス変数に関する@ cricket_007 – Axel

答えて

1

Goにはクラスがありません。 Goには静的変数はありません。したがって同等物はありません。

Goには、パッケージ定数と構造フィールドがあります。どちらもあなたが探しているものとまったく同じです。別の場所で

package array 

type Array struct {} 

const MaxSize int = 42 

+0

私は同じ名前の構造体とパッケージを持つことができますか? – Axel

+0

あなたは偶然、ある種のことができますが、それは有用ではありません。 [パッケージ名](https://blog.golang.org/package-names)は常に小文字でなければなりません。構造体も小文字の名前を持つことができますが、その構造体はエクスポートされず、その有用性が制限されます。とにかく名前を共有する必要があるという理由はありませんので、実際には関係ありません。 – Flimzy

+0

@Axel: "同じ名前の構造体とパッケージを使用できますか?"はい、便利なことがあります。たとえば、 'package file;タイプファイルstruct {fd uintptr};ファイルstruct {file * file};をタイプします。 func New()* File {return&File {file:new(file)}}; '。 – peterSO

0

それは、プレーンと同等ではありませんあなたはJavaで、あなたのプログラムのような移動でプログラミングしようとすると

package main 

import "./array" 

fmt.Println(array.MaxSize) 
0

、あなたのコードはひどいとなります。 Javaを忘れて、Goのプログラム。ゴーはクラスを持っていません。ゴーで

は、あなたが(それがJavaクラスではありません)このようなものが表示される場合があります行くの等価はありません

package array 

const MaxSize = 42 

type Array struct { 
    slice []byte 
} 

func New(size int) *Array { 
    if size < 0 { 
     return nil 
    } 
    if size > MaxSize { 
     size = MaxSize 
    } 
    return &Array{slice: make([]byte, size)} 
} 

func (a *Array) Size(size int) int { 
    if a == nil { 
     return 0 
    } 
    return len(a.slice) 
}