私は夜のプログラミングを過ごしているうちにこれに来ました。メソッド呼び出しの問題
//Reader class isn't java.io but it's from third party library
public class ACR122U extends Reader {
// This method is called from outside
// This method overrides method of the Reader class
@Override
public void open(UsbDevice device) {
new OpenTask().execute(device);
}
private class OpenTask extends AsyncTask<UsbDevice, Void, Exception> {
@Override
protected Exception doInBackground(UsbDevice... params) {
Exception result = null;
try {
// There the problem (recursion) happens
// I don't want to call ACR122U.open() but Reader.open()
// I cannot call super.open() /super of OpenTask class is AsyncTask/
open(params[0]);
} catch (Exception e) {
result = e;
}
return result;
}
}
}
open()メソッドの名前を変更せずに問題を解決できるかどうかは疑問です。
PS:初心者はこちらです。
あなたが達成しようとしていることは、コードの途中でコメントに埋もれていることは本当に役に立ちません。私はあなたの質問を、理想的にはより単純な状況(USBやタスクの関与なし)で書き直し、あなたが達成しようとしていることを説明することを強くお勧めします。 –
[なぜsuper.super.method()ですか? Javaで許可されていないのですか?](http://stackoverflow.com/questions/586363/why-is-super-super-method-not-allowed-in-java) –
'open()'メソッドの規約が'open()'メソッドからの復帰時に 'Reader'がオープンされるためには、あなたはその契約に違反しています。呼び出し側は、 'open()'の呼び出しの後に 'Reader'がオープンしていることを期待して、' Reader'を*使用するようになりますが、将来の未定義の時間まで実際のオープン操作を延期しています。コードがクラッシュします。呼び出し側はいつ 'Reader 'が使用できる状態になるのを期待するべきですか? – Andreas