当前位置: 首页 > 知识库问答 >
问题:

Java通用返回值:双重铸造

范鸿畅
2023-03-14

我对Java非常陌生,尤其是编写泛型代码。我的任务是编写泛型函数,返回ResultSet对象的ID列的值。

父类有整数ID,子类有字符串ID(我知道有字符串ID很少见,但数据很具体)

所以在父类中,我最终得到了函数:

public <T> T getRowId(ResultSet rs) throws SQLException {
   return (T)((Long)rs.getLong(idCol));
}

在子类中,我有一个覆盖父类的方法:

public <T> T getRowId(ResultSet rs) throws SQLException {
   return (T)(rs.getString(idCol));
}

当我需要调用这个函数时,我只需要:

getRowId(rs)

我的问题是,如果做双重铸造(T)((长) 可以吗?有没有更简单的方法来实现这个功能,我不知道?

共有1个答案

公风史
2023-03-14

正如评论所说,当您确切知道您正在获取LongString时,转换为T是没有意义的。

以下是您可以采取的两种方法:

方法一:

@SuppressWarnings("unchecked")
public static <T> T getRowId(ResultSet rs) throws SQLException {
    return (T)rs.getObject(1);
}

方法二:

public interface RowMapper<T>{
    public T getRowId(ResultSet rs) throws SQLException;
}

public class ParentRowMapper implements RowMapper<Long>{

    public Long getRowId(ResultSet rs) throws SQLException {
        return rs.getLong(1);
     }
}

public class ChildRowMapper implements RowMapper<String>{

    public String getRowId(ResultSet rs) throws SQLException {
        return rs.getString(1);
     }
}
 类似资料:
  • 我目前在辅导一个高中生AP Java,她问了我一个关于“双选”的问题。我以前从未听说过这个术语,但显然她的老师希望她在即将到来的期末考试中知道这个术语。 她的老师提供的例子是,如果你想将一个整数转换成一个字符串,你必须执行以下操作才能避免编译器错误: 问题是:你想在现实生活中什么时候这样做? 老师只提供了导致运行时错误的示例。此外,我从来不知道有一个术语,但这样做似乎是个坏主意,因为只有当两种类型

  • 我不确定这在Java中是否可行。而且,我也不知道该在谷歌上查询什么。无论如何,我想要一个方法,它将一个类(接口或类)作为参数,并且该方法的返回类型是该类的一个实例。我不想事后重铸一个物体。 我不确定这个功能是否存在,或者语法是什么。假设我有一个名为XYZ的类,这是我的伪方法。 现在假设XYZ是某种通用语法。这在Java中可能吗?谢谢你的帮助。

  • 问题内容: 这是一个例子: 这将返回0,而不是应有的0.33333…。 有人知道吗? 问题答案: 这是因为和会被视为您没有另外指定时的处理方式,因此先评估, 然后将转换为。要解决此问题,请尝试,或者明确声明您正在处理double值。

  • 我需要一个方法,它将接受String数字作为参数,如果它有一个余数,返回双,如果它是十进制,返回int。 我写了这样的代码: 但是,由于这个方法的签名是两倍,它在任何情况下都会返回两倍。 请给我一些提示。

  • 在抽象工厂模式中,我使用泛型。我有一个扩展Serializable的BaseEntity接口,Employee类实现了BaseEntity。在抽象类中,我有一个getJavaObj方法 是一种方法,它接受并返回

  • 下面的代码生成一个 空指针异常 由于此人在本例中没有任何,因此我想将返回到 尝试添加仍然会产生相同的错误。 这应该如何处理?如果条件,有没有办法处理同一行代码而不是再检查一行?