Java模板功能

use*_*708 7 java generics

我有一个函数,有时必须返回Date一次DateTime(Joda-Time).

static public <T extends Object> T convertTimeForServer(DateTime toSave) {
        DateTime temp = null;
        try {
            temp = toSave.withZone(DateTimeZone.forID(getServerTimeZone()));
        } catch (Exception e) {
        }

        T toReturn = null;
        if (toReturn.getClass().equals(temp)) {
            return (T) temp;//Return DATETIME
        } else {
            return (T) temp.toDate();//Return DATE
        }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?
如何使用它?

像这样(timerHelper是类的名称):

    DateTime t = timerHelper.<DateTime>convertTimeForServer(new DateTime());
    Date t2 = timerHelper.<Date>convertTimeForServer(new DateTime());
    or
    DateTime t = (DateTime)timerHelper.convertTimeForServer(new DateTime());
    Date t2 = (Date)timerHelper.convertTimeForServer(new DateTime());
Run Code Online (Sandbox Code Playgroud)

以及如何使用此功能?

static public <T extends Object> T current_Moment(){
        return convertTimeForServer(new DateTime());
    }
Run Code Online (Sandbox Code Playgroud)

Dan*_*kov 6

我怀疑你在这里尝试使用泛型是太聪明了.因为你没有返回类型的多态性并不意味着你应该求助于泛型来尝试实现这种效果.

您可以将其简单地实现为两种方法:public static Date convertToDateForServer(DateTime toSave) {...}public static DateTime convertToDateTimeForServer(DateTime toSave) {...}.调用代码似乎知道它想要什么,所以它可以简单地调用所需的方法.如果这两种方法确实存在复杂的共性,那么创建一个可以在内部调用的私有方法.