如何在Java/Android中重用内部类?
我是一名长期(8年)从事安卓系统开发的C#开发者。这是我第一次使用Java,当涉及到内部类时,我很难改变我的思维方式
我试图编写一个类来包装RESTful API,以便从一个类型安全的地方在服务器上执行各种调用,例如
string jsonResult = APIWrapper.getItems("category 1");
我想使用一个异步任务来获取后台的内容
因此,一种方法是将AsyncTask放在APIWrapper中:
class ActivityA extends Activity {
myButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//get stuff and use the onPostExecute inside the APIWrapper
new APIWrapper().GetItems("Category A", MyGetItemsCallBack);
}});
function void MyGetItemsCallBack(String result)
{
//render the result in the activity context, in a listview or something
}
}
我不确定回调/委托的想法在Java中是否有效
另一种方法是在活动中使用AsyncTask并创建APIWrapper,以便像工人/助手一样获取数据:
class ActivityA extends Activity {
myButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//get stuff and use the onProcessComplete inside the APIWrapper
new GetItems("Category A");
}});
class GetItems(String theCategory) extends AsyncTask
{
doInBackground()
{
return new APIWrapper().GetItems(theCategory);
}
onPostExecute(String result)
{
//render the result in the activity context, in a listview or something
}
}
}
有人能帮我做出正确的选择吗
# 1 楼答案
Java没有类似于C#委托的东西,所以您的第一个建议不可能像现在这样
标准解决方案是声明一个可以作为回调传递的接口:
然后你可以做类似的事情
或者您可以使用匿名类:
如果需要许多不同类型的回调,可以使用泛型来避免声明许多小接口:
# 2 楼答案
常规内部类持有对外部类的对象的引用,所以在没有外部类的情况下无法创建其实例。这意味着内部类不能从外部类重用
您正在使用的匿名内部类肯定不能重用:它们是在外部方法的上下文中创建的
但是,您可以将内部类定义为静态类。在这种情况下,您可以在代码中的任何地方使用它
但你的情况是,我认为更好的解决办法是你自己建议的解决办法2。只需创建单独的类,就可以从代码中的任何地方使用它