调用Class.newInstance()时,不能实例化类没有空构造函数

时间:2014-11-19 17:09:18

标签: java android

我正在尝试使用以下代码在我的自定义Dialog类中创建RadioGroup

public static Dialog singleChoiceRB(
    Activity a
    , String title
    , CharSequence[] items
    , Class<?> itemListener
    , OnClickListener pocl
    , String pocl_txt){

MyCustomDialog dialog = MyCustomDialog();
// Setup stuff in here //

RadioGroup rg = new RadioGroup(a);

for(int i = 0; i < items.length; i++){
    RadioButton rb = new RadioButton(a);
    rb.setText(items[i]);
    RadioButtonOptionOnClick rbooc;
    try {
        rbooc = (RadioButtonOptionOnClick) itemListener.newInstance(); // <-- failing here
    } catch (InstantiationException | IllegalAccessException e) {
        e.printStackTrace();
        continue;
    }
    rbooc.setWhich(i);
    rb.setOnClickListener(rbooc);
    rg.addView(rb);
}

dialog.addBodyView(rg);
return dialog.getDialog();
}

我有一个名为RadioButtonOptionClick

的抽象类
public abstract class RadioButtonOptionOnClick implements OnClickListener{
  protected int which;

  public RadioButtonOptionOnClick(){
  }

  public void setWhich(int which){
    this.which = which;
  }
}

扩展它的类

public class ScanButtonFragmentConfirmOnClick extends RadioButtonOptionOnClick{
  public ScanButtonFragmentConfirmOnClick(){
    super();
  }

  @Override
  public void onClick(View view) {
    setConfirmGuid(which);
  }
}

我在这里调用我的对话框构造函数

confirm = MyDialogFunctions.singleChoiceRB(
    a
    , c.getString(R.string.checkInConfirm)
    , s.toArray(new CharSequence[s.size()])
    , ScanButtonFragmentConfirmOnClick.class
    , new OnConfirmClick(c, a)
    , getString(android.R.string.ok)
    );
confirm.show();

我抓到的错误就是这个

  

java.lang.InstantiationException:无法实例化类   {} MyPackage的$ .ScanButtonFragment OnItemClick;没有空构造函数

如您所见,我在ScanButtonFragmentConfirmOnClickRadioButtonOptionOnClick都有空构造函数。这是怎么回事? OnClickListener没有构造函数,因为它是一个接口,问题是什么?

1 个答案:

答案 0 :(得分:1)

在我的头撞了一会儿之后,我尝试将ScanButtonFragmentConfirmOnClick从我的Fragment中移出,它嵌入到自己的类中并且看起来很有效。

另外,对于踢腿和咯咯笑,我试图让嵌套类保持静态,并且也可以做到这一点。

故事的道德是,在尝试呼叫Class.newInstance()时,不要使用非静态嵌套类。它没有用。