我有7-8个可调用类,它们使用了一些类似的功能,并且还读取了一些相同的列表和HashMap。 所以我创建了一个静态类,其中包含静态函数和静态列表以及hashMap的所有功能。
现在,我有一些疑问:
1。)在java中使用静态类是不正确的做法,因为我的大四学生骂我使用静态类,而是让我把它转换成单例类。
但是静态类比单例更快。不是吗?
2。)引用静态/非静态方法获取调用方法(在线程中)列表中的某些数据或执行某些任务是不是一个糟糕的设计?
这是否违反了我的大四学生所说的线程安全性或并行性?并要求我将线程类中的列表作为私有成员。
但是对于内存的使用并不是很糟糕,因为其他6-7个线程类使用相同的列表来进行只读。
3。)如何通过提高性能来改进面向对象设计。
示例代码如下所示:
public class StaticClass {
private static List<String> ListOne;
private static List<String> listTwo;
private static HashMap<String, String> hMap;
static{
//initialize list and maps by reading from file
}
public static List<String> getListOne() {
return ListOne;
}
public static List<String> getListTwo() {
return listTwo;
}
public static HashMap<String, String> gethMap() {
return hMap;
}
public static void commonMethodOne(){
}
public static String commonMethodTwo(){
}
public static String[] commonMethodThree(){
}
}
public class CallableThread implements Callable<String>{
public String call(){
HashMap<String, String> mapTask = StaticClass.gethMap();
List<String> taskOne =StaticClass.getListOne();
for(String temp : taskOne){
//do what you are suppose to do
}
for(String key : mapTask.keySet()){
//do what you are supposed to do
}
return "Done with CallableThread";
}
}
答案 0 :(得分:2)
这样的方法是一个糟糕的想法(命名不佳并且不遵循Java编码标准):
public static List<String> getListOne() {
return ListOne;
}
您返回一个可变引用,因此获取此List的任何人都可以根据需要修改其内容。私人不再是私人的。
如果必须返回对私有列表或数据结构的引用(没有理由这样做,我可以看到),您应该使其不可变或返回副本。
public static List<String> getListOne() {
return Collections.unmodifiableList(ListOne);
}
你有可变的共享数据而没有任何类型的同步,所以这个类根本不是线程安全的。
答案 1 :(得分:1)
我认为单身人士比静态课程好得多
以下是您的问题的连续答案:
1)不,这完全取决于您的要求,但是静态类更快,但也允许更多错误进入您的项目
2)有时只要不影响您的私人数据成员并使您的数据不安全
3)使用单身,因为它提供了更多的OO功能,从而提高了性能
以下是一篇很棒的参考文章: