2013-12-01 5 views
0

Бит застрял на моем Java-коде. Я скорректировал код ниже, чтобы дать тривиальный пример, ответы по-прежнему будут применимы. В принципе,Вызов метода для объекта, созданного другим методом?

У меня есть три класса файлов: GUI, main, pipe1.

Мой GUI принимает некоторые значения для переменных: length и height. Затем он вызывает main.makePipe, который является статическим методом, содержащим оператор if, который затем создает новый pipe1 под названием createdPipe. Пример:

public static void makePipe(double length, double width){ 
    if(length > 0 && length < 4){ 
     pipe createdPipe = new pipe1(length, height); 

Теперь мой новый объект createpipe имеет метод basicCost который делает возврат стоимости трубы:

protected void calculateCost(){ 
    double basicCost = height * length + 300; 
    return basicCost; 
    } 

я застрял на том, как получить это возвращаемое значение, все пути назад к классу GUI? Если я бегу (в моем классе GUI):

createdpipe.calculateCost(); 

он говорит, что не может найти символ. Справедливо. Если я создаю метод в main и поставить:

public double finalCost(){ 
pipeCost = createdPipe.calculateCost(); 
return pipeCost; 
} 

и попытаться вызвать его из моего GUI (main.finalCost) я получаю: не статический метод не может быть справка из статического контекста.

Я понимаю, почему, но может ли кто-нибудь сказать мне, как я могу сделать этот объект известным классу GUI или способ, которым я могу рассчитать данные в классе pipe1 и вернуть данные в класс GUI, который будет использоваться?

ответ

1

createdPipe - это локальная переменная, поэтому вам нужно изменить область действия этой переменной.

вы должны объявить статическую переменную ссылку на createdPipe объект в основном, как это:

private static pipe1 createdPipe; 

изменить метод makePipe, поэтому он будет создавать createdPipe:

public static void makePipe(double length, double width){ 
    if(length > 0 && length < 4){ 
     createdPipe = new pipe1(length, height); 

, то вы должны объявить finalCost как статический метод:

public static double finalCost()  

потому что createdPipe может быть null, вы должны проверить, имеет ли createdPipe значение null в методе finalCost.

+1

Или используйте 'makePipe' как тип фабричного метода, который возвращает новые экземпляры' pipe1', но он по-прежнему является правильной концепцией. Но я бы предпочел не использовать 'static', поскольку OP не имеет ;) – MadProgrammer

+0

Спасибо за ответ, к сожалению, я не могу сделать calcCost статическим методом, потому что он приводит к тому, что другие переменные, используемые в методе, вызывают нестационарную ошибку переменной .. любые другие предложения? – user3053434

+0

@ user3053434, извините, должен объявить finalCost как статический метод, public public double finalCost() ' –

Смежные вопросы