[英]Java - using newInstance() on a Generic Class with Class<? extends myClass>: InstantiationException
[英]InstantiationException when using newInstance on BroadcastReceiver
我有一個帶有很多靜態便利方法的類。 其中之一應動態啟動BroadcastReceiver-但它始終返回InstantiationException。 BroadcastReceiver有一個無參數的構造函數,因此它應該可以工作-但事實並非如此。 這是我到目前為止所做的:
這是該類中的便捷方法:
// Static convenience methods in a tools class
public class MyTools {
// Start BroadcastReceiver dynamically
public static BroadcastReceiver startBroadcastReceiver(Context context,
Class<? extends BroadcastReceiver> receiverClass, String receiverTag) {
BroadcastReceiver receiver = null;
try {
receiver = (BroadcastReceiver) receiverClass.newInstance();
if (receiver != null) {
IntentFilter intentFilter = new IntentFilter(receiverTag);
if (intentFilter != null) {
context.registerReceiver(receiver, intentFilter);
}
}
} catch (Exception exception) {
// --> InstantiationException
}
return receiver;
}
// ...
}
這是一個具有InnerClass BroadcastReceiver的活動,該活動嘗試使用此便捷方法啟動BroadcastReceiver:
// An activity with an InnerClass BroadcastReceiver
public class MyActivity extends Activity {
public class MyBroadcastReceiver extends BroadcastReceiver {
public static final String TAG = "aa.bb.cc.MyActivity.MyBroadcastReceiver";
public static final long ACTION_UNDEFINED = 0;
public static final long ACTION_DOSOMETHING = 1;
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
Bundle bundleExtras = intent.getExtras();
if (bundleExtras != null) {
long action = bundleExtras.getLong("ACTION");
if (action == ACTION_DOSOMETHING) {
doSomething();
}
}
}
}
}
private MyBroadcastReceiver receiver;
@Override
protected void onResume() {
super.onResume();
// Start BroadcastReceiver
receiver = (MyBroadcastReceiver) MyTools.startBroadcastReceiver(this,
MyBroadcastReceiver.class, MyBroadcastReceiver.TAG);
}
public void doSomething() {
// ...
}
}
這種方法有什么問題?
非常感謝您的幫助。
那就是問題所在
使您的廣播接收器成為靜態內部類公共靜態類MyBroadcastReceiver擴展了BroadcastReceiver
或在自己的文件中聲明
實例化異常中的無空構造函數消息可能會造成混淆
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.