Java模板函数

标签 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
    }
}

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

像这样(timerHelper 是类名):

DateTime t = timerHelper.<DateTime>convertTimeForServer(new DateTime());
Date t2 = timerHelper.<Date>convertTimeForServer(new DateTime());

DateTime t = (DateTime)timerHelper.convertTimeForServer(new DateTime());
Date t2 = (Date)timerHelper.convertTimeForServer(new DateTime());

以及如何使用此功能?

static public <T extends Object> T current_Moment(){
    return convertTimeForServer(new DateTime());
}

最佳答案

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

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

关于Java模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30939425/

相关文章:

java - 找不到主启动类

java - 在不刷新页面的情况下对 Struts2 操作进行 ajax 调用

c# - 类型参数 'T' 与外部类型 '...' 的类型参数同名

java - 继承期间Java中的泛型

java - 查找少于查询的元素数量的有效算法

使用 PostgreSQL 数据库的 Java Web 服务

generics - OCaml 中的通用定时器高阶函数

haskell - 访问泛型中的记录名称和函数

c# - Try-catch until success - 通用方法或委托(delegate)的执行循环

java - java多线程中的锁不起作用