【回転】内部クラス使用シーン1:外部クラスのみで使用される;二:コールバック関数の実現
この内部クラスはその外部クラスに依存して存在し、可能な原因は次のとおりです.
1、他のクラスで使用することはできません.
2、何らかの理由で他のクラスに引用されず、エラーが発生する可能性があります.
3、現在のクラスが大きすぎて、例えばある方法で、中には非常に多くのコードが書かれていて、再構築する必要があります.もしあなたが別のクラスに抽象化したいなら、内部クラスを考えてみてください.なぜなら、これらのコードは現在のクラスから抽象化され、現在のクラスにしか使用されていないので、内部クラスで実現するのもいいからです.以下、おなじみの例で説明します.
この時間に電信のメールの下で送る項目をして、上りのユーザーの携帯電話の番号に対して特殊な処理をしなければならなくて、それからメールを下に出して、それでは主な機能は下のメールで、しかし下で送る前に、ユーザーの番号に対して処理をしなければならなくて、下のメールを満たす時使います.
まず、コールバック関数とは何かを理解しなければなりません.
巧みな比喩:コールバック関数は本当にあなたが持っているBP機に似ています:他の人に番号を教えて、それが用事がある時Callあなた
コールバックは層間連携に用いられ、上層は下層に本層関数を実装する.この関数はコールバックであり、下層は一定の条件下でコールバックをトリガする.例えば、駆動として下層であり、彼はデータを受信すると、本層の処理作業を完了するほか、コールバックを行い、このデータを上層アプリケーション層に渡してさらなる処理を行う.これは階層化されたデータ通信において一般的である.
実際にはコールバックとAPIは非常に近く、彼らの共通性は階層間呼び出しの関数である.しかし、違いはAPIが低層から高層に提供される呼び出しであり、一般的にこの関数は高層に対して既知である.コールバックは正反対に、彼は上層部が下層部に提供する呼び出しであり、低層については未知であり、上層部がインストールしなければならない.このインストール関数は実は低層が提供するAPIであり、インストール後の低層はこのコールバックの名前を知らないが、関数の指針でこのコールバックを保存し、呼び出す必要がある場合、この関数ポインタと関連するパラメータポインタを参照するだけです.
実は:コールバックはこの関数が上層部に書かれていて、低層は1つの関数ポインタでこの関数を保存して、あるイベントのトリガの下で、低層はこの関数ポインタで上層部の関数を呼び出します.
コールバックに関するまとめ:
Javaでは、通常、別のクラスやクラスライブラリを作成する人がインタフェースを規定し、このインタフェースを実現し、このインタフェースのオブジェクトをパラメータとして他の人のプログラムに渡し、他の人のプログラムが必要に応じてそのインタフェースを通じて作成した関数を呼び出します.
Javaコールバック関数を使用して、関数の実行時間をテストするツールクラスを実装します.
クラスのメソッドの実行時間をテストする場合は、通常、次のようにします.
JAvaコード
testTime()メソッドを見ると、「//テストメソッド」だけが変更する必要があります.次に、同じ機能を実現する関数を作成しますが、より柔軟にします.
まずコールバックインタフェースを設定します.
JAvaコード
上の文字とコードでjavaというコールバックが理解できます.では、私たちは具体的にいつコールバック関数を使用しますか?
JDBCプログラミングを行う場合、try catch文ブロックによく書きますが、コールバック技術を採用すれば、重複する書き込みを完全に避けることができ、自分のメソッド体をコールバックインタフェースの方法で実現し、毎回同じtry catchに伝えられますが、それぞれのメソッドの内容は異なります.
また、例えばアルゴリズムが多い場合でも、このような実装モードを用いて実現することができる.最近SFTを見ると、多くのイベント駆動がコールバックで実現されていることがわかりました.たとえば、ボタンにイベントを追加します.
匿名の内部類が最もよく使われるのは、コールバックのすばらしい表現だ.コールバックは双方向呼び出しモードであり、すなわち、呼び出された側もインタフェースが呼び出されたときに相手のインタフェースを呼び出す.
1、他のクラスで使用することはできません.
2、何らかの理由で他のクラスに引用されず、エラーが発生する可能性があります.
3、現在のクラスが大きすぎて、例えばある方法で、中には非常に多くのコードが書かれていて、再構築する必要があります.もしあなたが別のクラスに抽象化したいなら、内部クラスを考えてみてください.なぜなら、これらのコードは現在のクラスから抽象化され、現在のクラスにしか使用されていないので、内部クラスで実現するのもいいからです.以下、おなじみの例で説明します.
この時間に電信のメールの下で送る項目をして、上りのユーザーの携帯電話の番号に対して特殊な処理をしなければならなくて、それからメールを下に出して、それでは主な機能は下のメールで、しかし下で送る前に、ユーザーの番号に対して処理をしなければならなくて、下のメールを満たす時使います.
public class SendSms implements SpInfo
{
public String sendSms(String userID,String productID,int OPType)
{
String res = null;
。。。
SendSms.AddressBean ab = new SendSms.AddressBean();//
//
org.apache.axis.types.URI[] addressesuri = ab.getDownAddress(userID);
。。。
// soapheader, 。
RequestSOAPHeader soapHeader = DownHeader.downHeader_ismp(productID, addressesuri);
。。。
SMS downsms = new SMS();
res = downsms.sendSMS(addressesuri, senderName, charging, down_message,
receiptRequest, soapHeader);
return res;
}
// ----
public class AddressBean
{
public org.apache.axis.types.URI[] getDownAddress(String senderAddress)
{
org.apache.axis.types.URI[] addressesuri = null;
String proaddress = "tel:" + senderAddress;
String[] address = new String[] {proaddress};
addressesuri = new org.apache.axis.types.URI[address.length];
try
{
for (int i = 0; i < address.length; i++)
{
addressesuri[i] = new URI(address[i]);
}
}catch(Exception ex)
{
ex.printStackTrace();
}
return addressesuri;
}
}
}
まず、コールバック関数とは何かを理解しなければなりません.
巧みな比喩:コールバック関数は本当にあなたが持っているBP機に似ています:他の人に番号を教えて、それが用事がある時Callあなた
コールバックは層間連携に用いられ、上層は下層に本層関数を実装する.この関数はコールバックであり、下層は一定の条件下でコールバックをトリガする.例えば、駆動として下層であり、彼はデータを受信すると、本層の処理作業を完了するほか、コールバックを行い、このデータを上層アプリケーション層に渡してさらなる処理を行う.これは階層化されたデータ通信において一般的である.
実際にはコールバックとAPIは非常に近く、彼らの共通性は階層間呼び出しの関数である.しかし、違いはAPIが低層から高層に提供される呼び出しであり、一般的にこの関数は高層に対して既知である.コールバックは正反対に、彼は上層部が下層部に提供する呼び出しであり、低層については未知であり、上層部がインストールしなければならない.このインストール関数は実は低層が提供するAPIであり、インストール後の低層はこのコールバックの名前を知らないが、関数の指針でこのコールバックを保存し、呼び出す必要がある場合、この関数ポインタと関連するパラメータポインタを参照するだけです.
実は:コールバックはこの関数が上層部に書かれていて、低層は1つの関数ポインタでこの関数を保存して、あるイベントのトリガの下で、低層はこの関数ポインタで上層部の関数を呼び出します.
コールバックに関するまとめ:
Javaでは、通常、別のクラスやクラスライブラリを作成する人がインタフェースを規定し、このインタフェースを実現し、このインタフェースのオブジェクトをパラメータとして他の人のプログラムに渡し、他の人のプログラムが必要に応じてそのインタフェースを通じて作成した関数を呼び出します.
Javaコールバック関数を使用して、関数の実行時間をテストするツールクラスを実装します.
クラスのメソッドの実行時間をテストする場合は、通常、次のようにします.
JAvaコード
public class TestObject {
/**
* ,
*/
public static void testMethod(){
for(int i=0; i<100000000; i++){
}
}
/**
*
*/
public void testTime(){
long begin = System.currentTimeMillis();//
testMethod();//
long end = System.currentTimeMillis();//
System.out.println("[use time]:" + (end - begin));//
}
public static void main(String[] args) {
TestObject test=new TestObject();
test.testTime();
}
}
testTime()メソッドを見ると、「//テストメソッド」だけが変更する必要があります.次に、同じ機能を実現する関数を作成しますが、より柔軟にします.
まずコールバックインタフェースを設定します.
JAvaコード
public class Tools {
/**
* , CallBack execute
* @param callBack
*/
public void testTime(CallBack callBack) {
long begin = System.currentTimeMillis();//
callBack.execute();///
long end = System.currentTimeMillis();//
System.out.println("[use time]:" + (end - begin));//
}
public static void main(String[] args) {
Tools tool = new Tools();
tool.testTime(new CallBack(){
// execute
public void execute(){
//
TestObject.testMethod();
}
});
}
}
上の文字とコードでjavaというコールバックが理解できます.では、私たちは具体的にいつコールバック関数を使用しますか?
JDBCプログラミングを行う場合、try catch文ブロックによく書きますが、コールバック技術を採用すれば、重複する書き込みを完全に避けることができ、自分のメソッド体をコールバックインタフェースの方法で実現し、毎回同じtry catchに伝えられますが、それぞれのメソッドの内容は異なります.
また、例えばアルゴリズムが多い場合でも、このような実装モードを用いて実現することができる.最近SFTを見ると、多くのイベント駆動がコールバックで実現されていることがわかりました.たとえば、ボタンにイベントを追加します.
Button okButton = createButton(buttons, "&Ok", "Process input",
new MySelectionAdapter(){
public void widgetSelected(SelectionEvent e)
{
System.out.println("Name: " + nameField.getText());
System.out.println("Address: " + addrField.getText());
System.out.println("Phone number: " + phoneField.getText());
}
});
匿名の内部類が最もよく使われるのは、コールバックのすばらしい表現だ.コールバックは双方向呼び出しモードであり、すなわち、呼び出された側もインタフェースが呼び出されたときに相手のインタフェースを呼び出す.