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 块中)。
  • 任何处理尝试块代码以便在另一个类中重用的方法。
  • 我怎么能在另一个类中处理所有这些异常。

我需要任何修改...

Object 类型的调用方法。

public class C{
private String attributeName;

   public String getAttributeName() {
       return attributeName;
   }

public Object method(){
attributeName=lAttribute.getName(); 
}
}
  • 如何将此 Object 类型的方法打印到 String(在 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

为什么不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 回答
1

我怎么能在另一个类中处理所有这些异常。

在您的调用类中,您可以捕获 Throwable (它将捕获所有异常和错误)

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

如果你不想在 Java 中捕获错误(我只在搞乱 ImageIO 并且有内存问题时才这样做)然后捕获异常而不是

任何处理尝试块代码以在另一个类中重用的方法

在这里你可以在另一个类中创建一个方法,然后在你的 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 回答