我正在使用Github上的Gautamv/j4gpg的Gopigo3类来控制DexterIndustries的Gopigo3板。该代码不是DexterIndustries的官方,而是DexterIndustries制作的Python库中的Java端口。
我只是在试图测试代码,而无法创建Gopigo3类的实例。我正在使用BlueJ,在BlueJ中制作了Gautamv的代码,然后将Gopigo3类导入到演示类中。
我的研究使我相信Gopigo3类被设计为单身人士,以确保仅创建一个实例并具有超载的构造函数以允许其实例化。
这是Gopigo类的相关代码:
private static GoPiGo3 _instance;
public static GoPiGo3 Instance() throws IOException, FirmwareVersionException{
if (_instance == null) {
_instance = new GoPiGo3(8, true);
}
return _instance;
}
public static GoPiGo3 Instance(int addr) throws IOException, FirmwareVersionException{
if (_instance == null) {
_instance = new GoPiGo3(addr, true);
}
return _instance;
}
public static GoPiGo3 Instance(boolean detect) throws IOException, FirmwareVersionException{
if (_instance == null) {
_instance = new GoPiGo3(8, detect);
}
return _instance;
}
public static GoPiGo3 Instance(int addr, boolean detect) throws IOException, FirmwareVersionException{
if (_instance == null) {
_instance = new GoPiGo3(addr, detect);
}
return _instance;
}
private GoPiGo3(int addr, boolean detect) throws IOException, FirmwareVersionException {
SPIAddress = addr;
spi = SpiFactory.getInstance(SpiChannel.CS1, // Channel 1
500000, // 500 kHz
SpiMode.MODE_0); // Mode 0
if (detect) {
//does detect stuff
}
预期的结果是Gopigo3类的初始化对象。代码当前不编译。Gopigo类无错误地编译,但是试图初始化Gopigo类的演示类却没有。
我的实例化尝试是
GoPiGo3 platform = new GoPiGo3();
导致以下错误:
com.j4gpg3.control.gopigo3类中的constructor gopigo3不能应用于给定类型: 必需:int.boolean
发现:没有争论
原因:实际和正式的参数列表的长度有所不同 您在这里使用的操作员不能用于您使用的值类型。您要么在此处使用错误的类型,要么是错误的操作员。
我尝试时:
GoPiGo3 platform = new GoPiGo3(8,true);
导致以下错误:
gopigo3(int,boolean(在com.j4gpg3.control.gopigo3
中具有私人访问权限
正如您所说的,它是使用单例模式实现的,因此您需要使用Instance
方法而不是构造函数。由于构造函数private GoPiGo3(int addr, boolean detect)...
上的私有修饰符,只能从Gopigo3类中调用。
public static GoPiGo3 Instance() throws IOException, FirmwareVersionException{
if (_instance == null) {
_instance = new GoPiGo3(8, true);
}
return _instance;
}
public static GoPiGo3 Instance(int addr) throws IOException, FirmwareVersionException{
if (_instance == null) {
_instance = new GoPiGo3(addr, true);
}
return _instance;
}
public static GoPiGo3 Instance(boolean detect) throws IOException, FirmwareVersionException{
if (_instance == null) {
_instance = new GoPiGo3(8, detect);
}
return _instance;
}
public static GoPiGo3 Instance(int addr, boolean detect) throws IOException, FirmwareVersionException{
if (_instance == null) {
_instance = new GoPiGo3(addr, detect);
}
return _instance;
}
要获得GoPiGo3
实例,您需要做:
GoPiGo3 platform = GoPiGo3.Instance(8,true);
参考:
https://www.geeksforgeeks.org/singleton-class-java/