如何在java中关联类?

时间:2013-06-10 04:41:37

标签: java

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

Second.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...!");
            }
        }
    }
}

Minute.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...!");
            }
        }   
    }
}

3 个答案:

答案 0 :(得分:5)

改进代码的最佳方法是删除所有类,然后使用TimeUnit

TimeUnit具有所有这些功能(以及更多功能),并附带JDK 不要重新发明轮子。

答案 1 :(得分:0)

当你说“相关”是非常广泛的话题。但是,正确的启动方式是使用java Packaging机制来关联最高级别的类。您可以使用Inheritance and Polymorphism管理代码(如果可能)。正如@Bohemian建议的那样,使用现有的java库,直到或除非你正在做新的并且为了学习目的而做。

答案 2 :(得分:0)

我看到两个选项:

<强> 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);如何将秒转换为分钟

一样