1

私はオブジェクト指向プログラミングの初心者で、何かを解決するためにいくつかの答えが必要です。MainActivity と、さまざまな操作用のいくつかのクラスがあります。たとえば、MainActivity では、BluetoothReceiver クラスから mBluetoothReceiver という名前のオブジェクトを作成します。sendData などの BT 接続を確立および管理するためのメソッドがあります。クラス Nmea では、BluetoothReceiver のメソッドを使用するいくつかのメソッドを取得したため、コンストラクター mBluetoothReceiver を渡します。

MainActivity クラス:

public class MainActivity extends Activity {

    BluetoothService mBluetoothService = new BluetoothService(this);

    //create new object from Nmea class and pass mBluetoothService to mNmea
    Nmea mNmea = new Nmea(mBluetoothService);
}

Nmea クラス:

public class Nmea {

BluetoothService mBluetoothService;

    //constructor for Nmea for BluetoothServce object
    public Nmea(BluetoothService bluetoothService) {
        mBluetoothService = bluetoothService;
    }

    public Nmea()
    {
    //empty constructor {

    }

    //Nmea methods...
}

私の問題は、Nmea クラスのメソッドも使用するクラス GPS も持っていることですが、その方法がわかりません。Nmea クラスに空のコンストラクターを配置し、GPS クラスに Nmea オブジェクトを作成しても問題ありませんか? BluetoothService オブジェクトを渡さないと、おそらく Bluetooth は動作しませんか? クラス GPS では、プロジェクト全体で確立された接続が 1 つしか必要ないため、新しい BluetoothService 接続オブジェクトを作成して Nmea コンストラクターに渡すことはできません。

GPS クラス:

public çlass GPS {

Nmea gpsNmea = new Nmea();

//I need to use Nmea methods here

}

私の質問を理解していただければ幸いです。それを機能させるために、このようなもので良い練習は何ですか? ありがとう!

4

3 に答える 3

1

クラス メソッドへのアクセス

メソッドによっては、演算子access modifierを使用してメソッドにアクセスできます。.そのようです:

String s = "Hello";
s = s.substring(0,3); // See how you use the ".", then the name of the method.

その他のクエリ

Nmea クラスに空のコンストラクターを配置し、GPS クラスに Nmea オブジェクトを作成しても問題ありませんか?

それに価値はありません。default constructor明示的に記述しない場合、Java は を提供します。

クラス GPS では、プロジェクト全体で確立された接続が 1 つしか必要ないため、新しい BluetoothService 接続オブジェクトを作成して Nmea コンストラクターに渡すことはできません。

次に、BluetoothServiceオブジェクトを処理するクラスをシングルトンにする必要があります。ここでシングルトンについて読むことができます。シングルトン パターンを使用すると、一貫して新しいオブジェクトを作成することなく、オブジェクトに静的にアクセスできます。

例えば

public abstract class BluetoothSingleton
{
    private static BluetoothService instance;
    // The one instance of BluetoohService that will be created.

    public static BluetoothService getInstance()
    {
        if(instance == null)
        {
            // If an object doesn't currently exist.
            instance = new BluetoothService(); // or whatever you're using.
        }
        return instance;
    }
}

オブジェクトを取得したい場合は、クラス内のメソッドをBluetoothService呼び出すだけです。getInstance()BluetoothSingleton

BluetoothService = BluetoothSingleton.getInstance();
// This code will return the exact same instance. Only one will ever be created. 
于 2013-05-11T12:30:29.427 に答える
0

Nmea内部でクラスのインスタンスを使用して、のGPSメソッドを使用できますNmea。これをクラスgpsNmea.any_Nmea_function()内のコードに追加するだけです。GPS

public çlass GPS {

Nmea gpsNmea = new Nmea();

gpsNmea.getN(); //assuming getN() is a function defined in Nmea class.

}

この.演算子を使用すると、メンバー メソッド、またはクラス インスタンス変数の変数にアクセスできます。

于 2013-05-11T12:30:45.757 に答える