1

我是面向对象编程的初学者,我需要很少的答案来解决问题。我有一个 MainActivity 和几个用于不同操作的类。例如,在 MainActivity 中,我从 BluetoothReceiver 类创建了一个名为 mBluetoothReceiver 的对象。有一些方法可以建立和管理 BT 连接,例如 sendData。在 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...
}

我的问题是,我还有 GPS 类,它也将使用 Nmea 类中的方法,但我不知道该怎么做。可以在 Nmea 类中放置空构造函数并在 GPS 类中创建 Nmea 对象吗?如果我不传递 BluetoothService 对象,蓝牙可能无法工作?在 GPS 类中,我无法创建新的 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 类中,我无法创建新的 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 回答
1

你可以这样写:

public class MainActivity extends Activity {
    BluetoothService mBluetoothService = new BlueToothService(this);

    Nmea mNmea = new Nmea(mBluetoothService);

    Gps mGps = new Gps(mNmea);     
}

你的Gpscconstructor 需要看起来像这样:

public class Gps {

    private Nmea mNmea;

    public Gps(Nmea nmea) {
        mNmea = nmea;
    }
}

如果你只需要一个BluetoothService类的实例,你需要使用单例设计模式来编写他,并且类中所有需要的方法都Nmea声明为public

于 2013-05-11T12:44:32.620 回答
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 回答