2017-08-26 6 views
0

私はJavaが参考値ではなく値渡しであることを知っています。しかし、私は、Android用この間プログラミング直面:Javaで参照渡しが発生しました。どうすれば同じことができますか?

int originalPos[] = new int[2]; 
view.getLocationOnScreen(originalPos); 
int m = originalPos[0]; 

メソッド宣言に行くと、私はこれを見つける:

public void getLocationOnScreen(int[] outLocation) { 
    throw new RuntimeException("Stub!"); 
} 

私は、このメソッドを宣言していませんでした。私は、参照することにより、偽のパスやってのけることができるように、このような何かを行っている可能性があり(実際には参照渡しではなく、1つの変数のみのために働くだろう)、Javaで:

int locationOnscreen; 

public void getLocationOnScreen() { 
    locationOnscreen = 10; 
} 

しかしgetLocationOnScreen(int[])が宣言されていますAndroid SDKの

viewは、Android SDKのタイプViewの目的です。どのように私はこれのようなものを実装することができますか?

+0

あなたの質問が何であるかは不明です。しかし、あなたの* "Javaのリファレンスで偽のパスを引き出すことができるように、このようなことをすることができました" *:まあ、いいえ、できませんでした。 –

+0

@ T.J.Crowderお知らせしてくれてありがとう。私は私の質問と質問の本文のいくつかの詳細を変更しました。 –

答えて

0

質問で推測:はい、AndroidのSDKには、手を差し伸べると、それに渡さ変数を変更する方法のための方法はありません(Javaは参照渡していないが事実を使用しています)、変数の値、または関数などに渡されたオブジェクト(配列を含む)は、オブジェクトそのものではありません。それは、オブジェクトがメモリ内のどこにあるのかを示す値です。そのオブジェクトの状態は、そのオブジェクトへの参照を受け取る関数によって変更することができます。あなたが言及しているAndroid SDKメソッドの場合、おそらくそれは配列を埋めるでしょう。

これは、方法は、複数の情報を返すことができる方法の一つです。 (間違いなく別の  —同じものは、本当に  —)は、その性質、それが埋め非配列オブジェクトを受け入れることです

はのは、単純な例を見てみましょう:。

public class Temp { 
    public static void main(String args[]) throws Exception { 
     int[] x = new int[1]; 
     System.out.println(x[0]); // 0, the default value for int[] entries 
     changeIt(x); 
     System.out.println(x[0]); // 42, it changed 
    } 

    private static void changeIt(int[] a) { 
     a[0] = 42; 
    } 
} 

mainランは、私たちが作成配列のオブジェクト参照をxに格納します。

 
          +−−−−−−−−−+ 
x=Ref554615−−−−−−−−−−−−−−−−−>| (array) | 
          +−−−−−−−−−+ 
          | 0: 0 | 
          +−−−−−−−−−+ 

「Ref554615は」完全に概念であることを、我々は逆に噂にもかかわらず、(いや、いなくても、オブジェクトのデフォルトtoStringからのオブジェクト参照の実際の値を見ることはありません:メモリでは、我々はこのような何かを持っています)。

さて、mainは、関数にxを渡し、changeItを呼び出します。我々はchangeItを入力すると、我々はこのようなものがあります。そして、

 
          +−−−−−−−−−+ 
x=Ref554615−−−−−−−−−+−−−−−−−>| (array) | 
       /  +−−−−−−−−−+ 
        |   | 0: 0 | 
        |   +−−−−−−−−−+ 
        | 
a=Ref554615−−−−−−−−+ 

changeIta[0] = 42を行い、私たちは持っている:

 
          +−−−−−−−−−+ 
x=Ref554615−−−−−−−−−+−−−−−−−>| (array) | 
       /  +−−−−−−−−−+ 
        |   | 0: 42 | 
        |   +−−−−−−−−−+ 
        | 
a=Ref554615−−−−−−−−+ 

その後changeItリターンを、バックmainで我々が持っている:

 
          +−−−−−−−−−+ 
x=Ref554615−−−−−−−−−−−−−−−−−>| (array) | 
          +−−−−−−−−−+ 
          | 0: 42 | 
          +−−−−−−−−−+ 

changeItは変更できませんx、変数。 xが参照するオブジェクトのの状態を変更することができます。その参照は、渡すことができる値であるためです。

関連する問題