2

ばかげているかもしれませんが、このコードの技術的な理解を明確にしたいと思います。

import netscape.*;//ldap jar
public class A {

    public void method() {
        ...

        try {
            //code is written here.
             LDAPSearchResults lsr = ldi.search(LDAPConnectionInfo.MY_SEARCHBASE,LDAPConnectionInfo.MY_SCOPE,LDAPConnectionInfo.MY_FILTER,null,false);
             while(lsr.hasMoreElements()){
             LDAPEntry findEntry = (LDAPEntry)lsr.nextElement();

        } catch(...) { 
        } 
    } 
}

今、私は別のクラスを呼び出します

public class B {
    A a = new A();
    //here I want to use attributeName 
}
  • BクラスのAクラスのメンバー(tryブロック内)にアクセスするにはどうすればよいですか。
  • 別のクラスで再利用するためのtryブロックコードを処理する任意の方法。
  • 別のクラスでこれらすべての例外を処理するにはどうすればよいですか。

必要な変更...

オブジェクト型の呼び出しメソッド。

public class C{
private String attributeName;

   public String getAttributeName() {
       return attributeName;
   }

public Object method(){
attributeName=lAttribute.getName(); 
}
}
  • このオブジェクトタイプのメソッドを(jspページの)文字列に出力するにはどうすればよいですか...任意の入力
4

4 に答える 4

5

Aクラスのメンバーとゲッターが必要です。

public class A {
   private String attributeName;

   public String getAttributeName() {
       return attributeName;
   }

   public void method(){
        ...

        try {
            //code is written here.
            attributeName = lAttribute.getName(); 
        }
        catch() { 
        } 
   } 
}

それで:

public class B {
    A a = new A();

    // somewhere
    String str = a.getAttributeName();
}

元の例のようにメソッドのプライベート変数にアクセスする方法はありません。これらはメソッド呼び出し中にのみスタックに存在するためです。

編集:私は別の質問に気づきました:

別のクラスでこれらすべての例外を処理するにはどうすればよいですか。

別の場所でメソッドを呼び出して、そこで例外をキャッチしたいと思います。その場合、throwsキーワードを使用して、メソッドが呼び出し元に例外を渡すことを通知できます。

public class A {

    public void method() throws IOException {

        //code is written here.
        String attributeName = lAttribute.getName(); 
    } 

    public void anotherMethod() {
        try {
            method();
        } catch(IOException ex) {
            ...
        } 
    }
}

その後、他のコードが呼び出さmethodれた場合、例外を処理するか、さらに伝播するように強制されます。

于 2012-08-28T11:14:33.037 に答える
1

別のクラスでこれらすべての例外を処理するにはどうすればよいですか。

呼び出し元のクラスでは、Throwableをキャッチできます(すべての例外とエラーをキャッチします)

try {
....
}
catch (Throwable t) {
//do something with the throwable.
}

Javaでエラーをキャッチしたくない場合(ImageIOをいじってメモリの問題が発生した場合にのみこれを実行しました)、代わりに例外をキャッチします

別のクラスで再利用するためのtryブロックコードを処理する任意の方法

ここでは、別のクラスでメソッドを作成し、それをtry/catchブロック内で呼び出すことができます。

public class XYX {
    public void methodForTry() throws Exception {
    //do something
    }
}


try {
    new XYZ().methodForTry();
}
catch (Exception e){
}

ここで新しいXYZを作成する場合としない場合があります。これは、このオブジェクトが保持できる状態と保持できない状態によって異なります。

最後の質問に関しては、チューダーの答えはこれをカバーしていると思います

于 2012-08-28T11:18:40.540 に答える
1

あなたの質問はコードテンプレートの抽出についてかもしれません

try { ... do stuff ... } 
catch (MyFirstException e) { ...handle ... }
catch (MySecondException e) { ...handle ... }
... more catch ...

パーツのみを変更したい場合... do stuff ...。その場合、Java 8に付属しているクロージャが必要になります。今日では、この種の非常に面倒なものが必要になります。

public static void tryCatch(RunnableExc r) {
  try { r.run(); } 
  catch (MyFirstException e) { ...handle ... }
  catch (MySecondException e) { ...handle ... }
  ... more catch ...
}

どこRunnableExcになりますか

interface RunnableExc { void run() throws Exception; }

そして、あなたはそれをこのように使うでしょう:

tryCatch(new RunnableExc() { public void run() throws Exception {
   ... do stuff ...
}});
于 2012-08-28T11:53:33.627 に答える
1

どうしてreturn

public String method() {
String attributeName
    try {
        //code is written here.
        attributeName = lAttribute.getName(); 
    } catch(...) { 
    } 
return attributeName;
}


public class B {
A a = new A();
String attributeName = a.method();
}
于 2012-08-28T12:12:14.953 に答える