天气报告的简单java代码

天气报告的简单java代码,java,multithreading,jakarta-ee,Java,Multithreading,Jakarta Ee,我的家庭作业任务是找出: 此代码的作用是什么 有哪些潜在问题 代码 ///Enum 公共枚举事件{ 龙卷风、雷雨、海啸、雨、雪、风、冷、热; 公共最终静态字符串CRITICAL=“CRITICAL”; 公共最终静态字符串SEVERE=“SEVERE”; 公共最终静态字符串MEDIUM=“MEDIUM”; 公共最终静态字符串LIGHT=“LIGHT”; 私有字符串严重性; 私有字符串位置; 公共无效设置严重性(字符串严重性){ 严重性=严重性; } 公共void集合位置(字符串位置){ 这个位

我的家庭作业任务是找出:

  • 此代码的作用是什么
  • 有哪些潜在问题
代码

///Enum
公共枚举事件{
龙卷风、雷雨、海啸、雨、雪、风、冷、热;
公共最终静态字符串CRITICAL=“CRITICAL”;
公共最终静态字符串SEVERE=“SEVERE”;
公共最终静态字符串MEDIUM=“MEDIUM”;
公共最终静态字符串LIGHT=“LIGHT”;
私有字符串严重性;
私有字符串位置;
公共无效设置严重性(字符串严重性){
严重性=严重性;
}
公共void集合位置(字符串位置){
这个位置=位置;
}
公共字符串toString(){
在“+位置返回super.toString()+”:“+严重性+”;
}
}
///接口
公共接口IEventListener{
收到无效事件(事件);
}
///阶级
公共类EventPublisher实现IEventListener{
Map listeners=newhashmap();
@凌驾
已接收公共同步的作废事件(事件){
对于(IEventListener侦听器:listeners.get(event)){
eventReceived(event);
}
}
公共同步无效寄存器(IEventListener侦听器,事件){
集合列表=侦听器.get(事件);
if(list==null){
列表=新的LinkedList();
put(事件、列表);
}
添加(侦听器);
}
公共同步作废注销器(IEventListener侦听器,事件){
获取(事件)、删除(侦听器);
}
公共字符串toString(){
字符串ret=“”;
迭代器i=侦听器.keySet().Iterator();
while(i.hasNext()){
迭代器j=listeners.get(i.next()).Iterator();
while(j.hasNext()){
ret=ret+i.next()+“:”+j.next()+“\n”;
}
}
返回ret;
}
}
我浏览了代码,发现该代码试图生成天气报告,并根据收到的
Event
对天气状况进行分类(
Event
可以注册/注销)


但是,我看不出代码有任何问题。我的老师坚持认为有问题。有人能帮我吗?

首先,
事件
不应该是
枚举
。因为它的成员实际上是单身;通过更改一个
龙卷风的严重程度,您可以更改所有龙卷风的严重程度。您应该有一个用于
事件类型
的枚举,一个用于
严重性
的枚举,以及一个使用它们的
事件

然后,事件发布服务器中的地图将更改


另外,
注销
方法可能引发空引用异常…

查找程序中问题的最佳方法之一是运行它。
事件
不应该是
枚举
恶劣天气太多了!海啸是一种天气吗?我认为这更像是一场自然灾害,比如森林火灾或地震。如果你有海啸,你可以排除各种不好的东西。。。洪水、火山喷发、流星雨、世界末日……Javascript、Windows ME、丰田雅利斯、库尔斯。。
/// Enum
public enum Event {
    TORNADO, THUNDERSTORM, TSUNAMI, RAIN, SNOW, WIND, COLD, HEAT; 
    public final static String CRITICAL = "Critical";
    public final static String SEVERE = "Severe";
    public final static String MEDIUM = "Medium";
    public final static String LIGHT = "Light";

    private String severity;
    private String location;

    public void setSeverity(String severity) {
        this.severity = severity; 
    }

    public void setLocation(String location) {
        this.location = location; 
    }

    public String toString() {
        return super.toString() + ":" + severity + " at " + location; 
    }
}

///Interface
public interface IEventListener {
    void eventReceived(Event event); 
}

///Class
public class EventPublisher implements IEventListener {
    Map<Event, Collection<IEventListener>> listeners = new HashMap<Event, Collection<IEventListener>>(); 

    @Override 
    public synchronized void eventReceived(Event event) {
        for (IEventListener listener : listeners.get(event)){ 
            listener.eventReceived(event); 
        }
    }

    public synchronized void register(IEventListener listener, Event event){
        Collection<IEventListener> list = listeners.get(event); 
        if (list == null) {
            list = new LinkedList<IEventListener>();
            listeners.put(event, list); 
        }
        list.add(listener);
    }

    public synchronized void deregister(IEventListener listener, Event event) {
        listeners.get(event).remove(listener); 
    }

    public String toString() {
        String ret = ""; 
        Iterator<Event> i = listeners.keySet().iterator();
        while (i.hasNext()) {
            Iterator<IEventListener> j = listeners.get(i.next()).iterator();
            while (j.hasNext()) {
                ret = ret + i.next() + "::" + j.next() + "\n"; 
            }
        }
        return ret; 
    }
}