我面临一个问题。我有一个名为“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()方法。我还导入了正确的包。
注意:这两个类都在不同的包中。
答案 0 :(得分:3)
更改如下:
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;
}
}
注意:根据定义Consumer
和CommunicationProtocol
类的包,您可能需要导入它们;例如在package
行之前添加这些行。
import some.package.Consumer;
import some.other.package.CommunicationProtocol;
注意2:您当前选择的软件包名称存在一些严重的样式问题。
包名称应全部小写
您的包名称的前缀应该是您公司,组织的(反向)DNS样式标识符;例如in.com.yourcompany...
。请注意,形成这种惯例有很好的理由!!
MyApp
/ myapp
内容免费且不应使用
services.reportingservice
多余/冗长;例如使用services.reporting
代替
使用与类相同的名称和包名称是冗余/详细
除非reporting
和webreporting
包中有很多类,否则它们可能应该折叠成一个包。很多包含1或2个类的包都没有帮助。
答案 1 :(得分:1)
我认为您的包裹名称已损坏。您似乎在包的末尾具有类的名称 - 但只有在导入时才会显示该类的名称。
所以你会:
package myApp.Services;
public class ReportService extends CommonService {/* code goes here */}
然后你会包括:
import myApp.Services.ReportService;
WebReportingService也是如此。 package
语句不应包含类名
修改:如果您确实需要ReportService
包myApp.Services.ReportService
,那么您需要导入myApp.Services.ReportService.ReportService
(或者myApp.Services.ReportService.*
,但不建议这样做,除非您从包中需要很多课程)
答案 2 :(得分:0)
您必须在源文件的顶部导入ReportingService类,如下所示:
import MyApp.Services.ReportingService.ReportingService;
编辑:第二个代码段也缺少类声明。如果这是完整的源代码,则无法编译。
基于编译器输出的另一个编辑:如果xx.xx.Java.Common.DesignPattern.ObserverPattern.Observer
类似乎依赖于类路径上的Consumer
类,它也会有所帮助。
答案 3 :(得分:0)
无法确定,但是当导入的类过时时,我已经看到了这种问题。
这可能发生在不同的IDE上,没有直接的解决方案:也许清理所有类并再次编译它们?
答案 4 :(得分:0)
我会尝试手工输入getInstance(),正如其他人在评论中所建议的那样。这应该工作。我相信你的IDE在键入点(。)后不会显示方法的原因可能只是因为以下返回true。正在阅读
ReportingService rs = ReportingService.return true;
它认为破坏了代码,因此不会提供代码完成。