java里面2个类有相同的方法,其他类引用怎么处理?

myismymxd 2015-04-01 05:29:22
情况是这样的:

我有2个activity:
ActivityA 、ActivityB 他们都有一个相同的方法 getWebView
然后都需要调用 ReadHttp 处理一些业务,然后根据不同的情况加载网页。
然后在ReadHttp 里面每次都要判断相应的activity?





public class ActivityA extends Activity {

public WebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState) {

//...
mWebView = (WebView) findViewById(R.id.aweb);

ReadHttp http = new ReadHttp(this);
http.parseInfo();
}

public WebView getWebView(){
return mWebView;
}

}

public class ActivityB extends Activity {

public WebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState) {

//...
mWebView = (WebView) findViewById(R.id.bweb);

ReadHttp http = new ReadHttp(this);
http.parseInfo();
}

public WebView getWebView(){
return mWebView;
}
}


//业务处理相关类
public class ReadHttp {
public Context mContext;
ReadHttp( Context c){
mContext = c;
}

public void parseInfo(){
//相关业务代码
//然后根据相关的情况让两个webview定义到相同的URL


String classname = mContext.getClass().toString();

if ( classname.indexOf('ActivityA') > -1){

ActivityA a = ( ActivityA ) mContext;
a.loadUrl( "xxx.com" ); //下面的b.loadUrl 和这里实现的东西都是一样的
} else if ( classname.indexOf('ActivityB ') > -1 ){

ActivityB b = ( ActivityB ) mContext;
b.loadUrl( "xxx.com" );
}
}

}




我感觉我这串代码写累赘了,

if ( classname.indexOf('ActivityA') > -1){

ActivityA a = ( ActivityA ) mContext;
a.loadUrl( "xxx.com" );
} else if ( classname.indexOf('ActivityB ') > -1 ){

ActivityB b = ( ActivityB ) mContext;
b.loadUrl( "xxx.com" );
}


如果我有10个活动都需要调用这个 ReadHttp的方法,我每次都要判断context,很麻烦呀


java里面的什么多态、泛型、不是很懂
是不是这个可以解决这个办法?
...全文
2735 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hvk687 2015-04-02
  • 打赏
  • 举报
回复
通过intent把需要的数据传递过去呗,把url啥的都传过去
myismymxd 2015-04-01
  • 打赏
  • 举报
回复
感谢楼上几位提供的思路 @inquisitive_plus 我可以试试 原本我是写PHP的,由于java是强类型语言,可能我整个的思路还是用PHP的思路来写JAVA了 PHP里面因为可以随意调用任意对象的方法,而且可以不注意类型 比如: 直接指定相应的对象就可以了 $activity->$parseInfo();
windfury_plus 2015-04-01
  • 打赏
  • 举报
回复
引用 2 楼 myismymxd 的回复:
不得行哦 loadUrl 是 webview 的方法,不是 activity 的方法。。。
我的想法是: 一个接口:

public interface IReadHttp {
	void myLoadUrl(String str);//依据业务需求定义
	//TODO: 增加其他的
}
一个抽象类,不过感觉可以和接口融合……

public abstract class NewContext extends Activity implements IReadHttp{
}
然后其他需要业务的activity实现抽象类:

public class ActivityA extends NewContext{

	@Override
	public void myLoadUrl(String str) {
		// TODO:XXXX
	}
	public WebView mWebView;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		
		mWebView = (WebView) findViewById(R.id.circle);
        
        MyReadHttp http = new MyReadHttp(this);
        http.parseInfo();
	}
}
最后是业务类:

public class MyReadHttp {
	public NewContext mContext;
	
	public MyReadHttp(NewContext c){
        mContext = c;
    }
	
  public void parseInfo(){
        //相关业务代码
        //然后根据相关的情况让两个webview定义到相同的URL
	mContext.myLoadUrl( "xxx.com" );   //下面的b.loadUrl 和这里实现的东西都是一样的
    }
}
可能写的不好。
windfury_plus 2015-04-01
  • 打赏
  • 举报
回复
引用 2 楼 myismymxd 的回复:
不得行哦 loadUrl 是 webview 的方法,不是 activity 的方法。。。
你耦合太高了吧
webview的方法给activity调是什么意思
assky124 2015-04-01
  • 打赏
  • 举报
回复
你不会用Intent启动,顺便把参数带过去?
myismymxd 2015-04-01
  • 打赏
  • 举报
回复
不得行哦 loadUrl 是 webview 的方法,不是 activity 的方法。。。
windfury_plus 2015-04-01
  • 打赏
  • 举报
回复
不用判断吧? mContext就是一个父类引用指向子类对象的例子 mConte直接mContext.loadUrl就有对应的方法, 不过最好还是写个接口让activity实现

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧