4

我写了时间转换程序(即秒到分和分秒等),但后来我发现这些类执行类似的操作。有没有办法将这些类联系起来,如果有请给出一些解决方案和建议。这是我的代码....

二.java

import java.util.concurrent.*;

public class Second {

    private long secondsValue;

    public Second() {
        secondsValue = 0L;
    }

    public Second(String from, String to, long unitValue) {
        unitSelection(from, to, unitValue);
    }

    private void convertSecondToMinute(long unitValue) {
        unitValue = TimeUnit.MINUTES.convert(unitValue, TimeUnit.SECONDS);
        secondsValue = unitValue;
    }

    private void convertSecondToHour(long unitValue) {
        unitValue = TimeUnit.HOURS.convert(unitValue, TimeUnit.SECONDS);
        secondsValue = unitValue;
    }

    private void convertSecondToDay(long unitValue) {
        unitValue = TimeUnit.DAYS.convert(unitValue, TimeUnit.SECONDS);
        secondsValue = unitValue;
    }

    private void convertSecondToWeek(long unitValue) {
        unitValue = unitValue/60/60/24/7;
        secondsValue = unitValue;
    }

    public long getSeconds() {
        return secondsValue;
    }

    private void unitSelection(String from, String to,
            long unitValue) {
        if( from.equalsIgnoreCase("second")) {
            if(to.equalsIgnoreCase("minute")) {
                convertSecondToMinute(unitValue);
            }
            else if(to.equalsIgnoreCase("hour")) {
                convertSecondToHour(unitValue);             
            }
            else if(to.equalsIgnoreCase("day")) {
                convertSecondToDay(unitValue);
            }
            else if(to.equalsIgnoreCase("week") ) {
                convertSecondToWeek(unitValue);
            }
            else {
                System.out.println("Invalid argument...!");
            }
        }
    }
}

分钟.java

import java.util.concurrent.TimeUnit;

public class Minute {
    private long unitMinute;

    public Minute() {
        unitMinute = 0L;
    }
    public Minute(String from, String to,
            long unitValue) {
        unitSelection(from, to, unitValue);
    }

    private void convertMinuteToSecond(long unitValue) {
        unitValue = TimeUnit.SECONDS.convert(unitValue, TimeUnit.MINUTES);
        unitMinute = unitValue;
    }
    private void convertMinuteToHour(long unitValue) {
        unitValue = TimeUnit.HOURS.convert(unitValue, TimeUnit.MINUTES);
        unitMinute = unitValue;
    }
    private void convertMinuteToDay(long unitValue) {
        unitValue = TimeUnit.DAYS.convert(unitValue, TimeUnit.MINUTES);
        unitMinute = unitValue;
    }
    private void convertMinuteToWeek(long unitValue) {
        long value = unitValue /60/24/7;
        unitMinute = value;
    }
    public long getUnitMinute() {
        return unitMinute;
    }
    private void unitSelection(String from, String to,
            long unitValue) {
        if( from.equalsIgnoreCase("minute")) {
            if(to.equalsIgnoreCase("second")) {
                convertMinuteToSecond(unitValue);
            }
            else if(to.equalsIgnoreCase("hour")) {
                convertMinuteToHour(unitValue);             
            }
            else if(to.equalsIgnoreCase("day")) {
                convertMinuteToDay(unitValue);
            }
            else if(to.equalsIgnoreCase("week") ) {
                convertMinuteToWeek(unitValue);
            }
            else {
                System.out.println("Invalid argument...!");
            }
        }   
    }
}
4

3 回答 3

5

改进代码的最佳方法是删除所有类并TimeUnit改用。

TimeUnit具有所有这些功能(以及更多功能)并随 JDK 一起提供。
不要重新发明轮子。

于 2013-06-10T04:46:53.897 回答
0

当你说“相关”是非常广泛的话题。但是,正确的开始方式是使用 java打包机制在最高级别关联类。您可以使用Inheritance 和 Polymorphism管理您的代码(如果可能)。正如@Bohemian 建议的那样,使用现有的 java 库,直到或除非您正在做某事新事物并出于学习目的而这样做。

于 2013-06-10T04:57:12.833 回答
0

我看到 2 个选项:

1. 将两者重新定义为一个类:建议使用通用值标准(例如毫秒数),并提供不同度量的含义,如分钟、小时等

class Duration
{
    private long secondsValue;

    public Duration() {
        secondsValue = 0L;
    }

    public Duration(String format, long value) {
        if (format.equals("SECONDS")) secondsValue = value;
        else if (format.equals("MINUTES")) secondsValue = value*60;
        else if (format.equals("HOURS")) secondsValue = value*60*60;
        else if (format.equals("DAYS")) secondsValue = value*60*60*24;
        else if (format.equals("WEEKS")) secondsValue = value*60*60*24*7;
    }

    public long  asMinutes() {
        return value/60;
    }

    public long asHours() {
        return value/(60*60);
    }

    public long asDays() {
        return value/(60*60*24);
    }

    public long asWeeks() {
        return unitValue/(60*60*24*7);
    }

    public long asSeconds() {
        return secondsValue;
    }
}

2. 使用转换器实用程序类:就像您如何TimeUnit.MINUTES.convert(unitValue, TimeUnit.SECONDS);将秒数转换为分钟数一样

于 2013-06-10T05:30:38.457 回答