gpt4 book ai didi

Java:无法访问静态单例方法

转载 作者:行者123 更新时间:2023-12-01 19:25:05 26 4
gpt4 key购买 nike

我面临一个问题。我有一个名为“ReportingService”的类,它应该是单例,并且正在扩展“CommonService”。

package MyApp.Services.ReportingService;

public class ReportingService extends CommonService {

private static ReportingService instance = null;

public static ReportingService getInstance() {
if (instance == null) {
instance = new ReportingService();
}
return instance;

}
}

并在我正在使用的其他类中访问该类

package MyApp.Services.WebReportingService;
@WebMethod(operationName = "registerUDP")
public boolean registerUDP(
@WebParam(name = "Friendly Name") String friendlyName,
@WebParam(name = "Username") String username,
@WebParam(name = "Password") String password,
@WebParam(name = "Communication Protocol") CommunicationProtocol communicationProtocol,
@WebParam(name = "IP Address") String ipAddress,
@WebParam(name = "Port") int port) {

Consumer client = new Consumer(friendlyName, username, password, communicationProtocol, ipAddress, port);

ReportingService rs = ReportingService.
return true;

}

在“ReportingService rs = ReportingService”中。它没有向我显示 ReportingService 类的 getInstance() 方法。我还导入了正确的包。

注意:这两个类位于不同的包中。

最佳答案

更改如下:

package MyApp.Services.ReportingService;  // FIXME - Make package names lowercase!!
// FIXME - Loopy package name

public class ReportingService extends CommonService {

private static ReportingService instance = null;

private ReportingService() { }

public static synchronized ReportingService getInstance() {
if (instance == null) {
instance = new ReportingService();
}
return instance;

}
}

import MyApp.Services.ReportingService.ReportingService; 

package MyApp.Services.WebReportingService ;
// FIXME - Make package names lowercase!!
// FIXME - Loopy package names.

public class WebReportingService {

@WebMethod(operationName = "registerUDP")
public boolean registerUDP(
@WebParam(name = "Friendly Name") String friendlyName,
@WebParam(name = "Username") String username,
@WebParam(name = "Password") String password,
@WebParam(name = "Communication Protocol") CommunicationProtocol communicationProtocol,
@WebParam(name = "IP Address") String ipAddress,
@WebParam(name = "Port") int port) {

Consumer client = new Consumer(friendlyName, username, password,
communicationProtocol, ipAddress, port);

ReportingService rs = ReportingService.getInstance();
return true;
}
}

注意:根据定义 ConsumerCommunicationProtocol 类的包,您可能需要导入它们;例如在 package 行之前添加这些行。

import some.package.Consumer;
import some.other.package.CommunicationProtocol;

注释 2:您当前选择的包名称存在一些严重的样式问题。

  • 包名称应全部小写

  • 您的软件包名称的前缀应该是您的公司、组织等的(反向)DNS 样式标识符;例如in.com.yourcompany...。请注意,形成此约定是有充分理由的!!

  • MyApp/myapp 内容自由,不应使用

  • services.reportingservice 是多余/冗长的;例如使用 services.reporting 代替

  • 使用与类和包名称相同的名称是多余/冗长的

  • 除非 reportingwebreporting 包中有很多类,否则它们可能应该折叠到一个包中。许多包含 1 或 2 个类的包没有帮助。

关于Java:无法访问静态单例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1713950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com