关于两种对象类型使用

直接描述的我的问题了。
我的需求是读取本地或异地的数据,程序中用到ResultSet(本地读取)和DepartResultset(异地读取,自己写的)来获得数据,程序就像这样:
[code="java"]
本地:代码一
conn = DBUtil.getConnection();
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = null;
rs = stmt.executeQuery(sql); [/code]

[code="java"]
异地:代码二
UnNativeDataSource ds = (UnNativeDataSource) DataSourceFactory.create(DataSourceTypes.UNNATIVETYPE);
DepartResultset rs = null;

         rs = ds.exec(this.postCode,sql);
         rs.first(); [/code]

下面再读取时统一用rs变量来读,如
[code="java"]
代码三:
if (rs.next()) {[/code]

我想问得是前面怎么设置两个不同类型rs, 怎么判断后给他转换个类型,就像如果true用本地rs,false用异地rs,最主要的是保证代码3不用修改。

[b]问题补充:[/b]
类被封装了,改不了。
我最简单的想法就是不用
[code="java"]if(本地)
if(rs.next)
...
else if(异地)
if(rs.next)
...[/code]

省略部分代码量比较大。
最好就是,[code="java"]Object rs = null;
if(本地)
rs = 本地
else
rs = 异地

  然后if(rs.next)
     ...[/code]

有没有这种方式的实现。
[b]问题补充:[/b]
如果本地
Connection conn = DBUtil.getConnection();

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

ResultSet rs = null;

rs = stmt.executeQuery(sql);

/*
如果异地
UnNativeDataSource ds = (UnNativeDataSource) DataSourceFactory.create(DataSourceTypes.UNNATIVETYPE);

DepartResultset rs = null;

rs = ds.exec(this.postCode,sql);

rs.first();

*/

if(rs.next()){
...
}

我要做的是就是把注释的这段也实现出来,这样会不会清楚些。
[b]问题补充:[/b]
public void test(boolean isNative, Object obj){
if(flag)
rs = (ResultSet)Obj;
else
rs = (DepartResultset)Obj;
if(rs.next) ...
}

wangying95599 的做法试过,rs很难定义,定义成Object,它没有.next()方法;定义成ResultSet/DepartResultset,似乎不行。
最好的做法我想还是异地操作类继承ResultSet类比较好。但是类被封装起来了。想办法沟通去。谢谢大家!
[b]问题补充:[/b]
[quote]使用组合啊,你自定义一个类,做为抽象类,再下面搞两个实现类,一个实现类使用本地的ResultSet做为内在属性,然后覆盖它的某一些方法
另一个实现类使用远程的ResultSet做为内在属性,然后覆盖它的某一些方法,不就可以了吗?不需要去改已经封装好的代码,当然,这个方法也只能说是权宜之计,考虑一下,
wangdgsc (初级程序员) 2009-09-21 [/quote]

这个建议很好啊,虽然没做,但是思路比较清晰了,谢谢wangdgsc!
AbstractResulsetSet(抽象类)
|e
|x
|t
|e
|n
|d _____NativeResult {ResultSet rs; method(){return rs;}}
|s |

------|
|
_____UnNativeResult
{DepartResultset rs; method(){return rs;}}

使用组合啊,你自定义一个类,做为抽象类,再下面搞两个实现类,一个实现类使用本地的ResultSet做为内在属性,然后覆盖它的某一些方法
另一个实现类使用远程的ResultSet做为内在属性,然后覆盖它的某一些方法,不就可以了吗?不需要去改已经封装好的代码,当然,这个方法也只能说是权宜之计,考虑一下,

继承rs吧

rs对象不一样啊,你用instanceof判断是哪个rs对象不行吗

不是很清楚楼主的需求

用instance of 判断rs对象,就可以了。如果还是不行,只有等待高手了

可以利用Java的反射机制 用 rs.getClass().getName() 来获取类的名称
然后用获取的结果比对 DepartResultset 或者 ResultSet 来区分是本地还是异地。

public void test(boolean isNative, Object obj){
if(flag)
rs = (ResultSet)Obj;
else
rs = (DepartResultset)Obj;
if(rs.next) ...

}

只能 instanceOf 了

想办法,看能不能用多态,

异地实现ResultSet接口即可,不用判断.

定义一个MyResultSet接口继承ResultSet接口 你的问题不就解决了.
如果本地
Connection conn = DBUtil.getConnection();

Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_UPDATABLE);

MyResultSet rs = null;

rs = stmt.executeQuery(sql);

/*
如果异地
UnNativeDataSource ds = (UnNativeDataSource) DataSourceFactory.create(DataSourceTypes.UNNATIVETYPE);

MyResultSet rs = null;

rs = ds.exec(this.postCode,sql);

rs.first();

*/