2012-02-08 7 views
1

Так что я пытаюсь сократить некоторые из кода, который был написан. Для этого я создал отдельный класс. У меня этот класс работает правильно, однако старый использует переменные, которые теперь находятся в отдельном классе. Как получить доступ к этим переменным? К сожалению, я не могу использовать весь код для этого, но я могу выделить небольшие кусочки, которые, по моему мнению, необходимы. Спасибо за помощьПолучить переменную из другого класса

Это из старого класса, который я сейчас пытаюсь довести переменный: Я пытаюсь принести «загрузчик» над

// XComponentLoader loader = null; 

fixture.execute(new OpenOfficeOpener()); 
component = loader.loadComponentFromURL("file:///"+System.getenv("BONDER_ROOT") + "/ControlledFiles/CommonFiles/"+spreadsheet, "_blank", 0, loadProps); 
+0

Это зависит от того, как определяется загрузчик и другой класс. Предоставьте более подробную информацию о других переменных класса и загрузчика. – kosa

+0

Не могли бы вы немного разобраться? Я не совсем понимаю, что вы имеете в виду, но доступ к полю класса 'A' ​​из класса' B' довольно тривиален (обычно, вызывая геттер). Итак, где проблема? – Thomas

ответ

0

Вы можете написать добытчик для членов, вам нужно быть видимым снаружи. Пример:

public class MyClass { 
    private int member1; 
    private String member2; 

    public int getMember1() { 
     return member1; 
    } 

    public String getMember2() { 
     return member2; 
    } 
} 

Теперь оба member1 и member2 могут быть доступны извне.

0

Есть несколько вариантов решения вашей проблемы. Я бы предложил добавить метод в свой класс, чтобы вернуть значение в новую программу или передать его в качестве параметра. Примером этого на более высоком уровне, может выглядеть следующим образом:

x = newClass.getValX()

0

Это звучит, как вы ищете для статического поля, но если это так, вы почти наверняка пересмотреть свой текущий проект.

public class YourClass { 

    private static XComponentLoader loader; 

    public YourClass() { 
     YourClass.loader = new XComponentLoader(); 
    } 


} 

А для доступа к нему из другого класса:

public YourOtherClass { 
    public void yourMethod() { 
     YourClass.loader ... 
    } 
} 
0

If loader статичен, чем сделать что-то вроде:

component = TheOtherClass.loader.loadComponentFromURL(... 

В противном случае новый класс необходима ссылка на экземпляр другого класса. Вы можете передать его с конструктором:

public class NewClass { 

    private OldClass oldClass = null; 
    public NewClass(OldClass oldClass) { 
     this.oldClass = oldClass; 
    } 

    // ... 

     fixture.execute(new OpenOfficeOpener()); 
     // assuming, loader is a public field on OldClass. 
     // a getter (getLoader()) is preferred 
     component = oldClass.loader.loadComponentFromURL("file:///"+System.getenv("BONDER_ROOT") + "/ControlledFiles/CommonFiles/"+spreadsheet, "_blank", 0, loadProps); 

    // ... 
} 
0

Я вас разделить функциональность на два класса, то вы можете иметь один класс экземпляр другой.

Если вы поместили свой новый код в класс B, это может выглядеть так.

public class A { 
    // Class B instance 
    B b = new B(); 

    public void doSomething() { 
     b.loadComponentFromURL("someurl"); 
    } 
} 

Или, если загрузчик представляет собой экземпляр самостоятельно, вы можете назвать его следующим образом.

b.getLoader().loadComponentFromURL("someurl");