2015-02-09 3 views
0

У меня есть класс Main. У меня также есть другой класс, который я сделал (назовите его классом «Runner»). Тем не менее, я хотел бы иметь больше классов Runner (разница между ними является модификацией каждого соответствующего класса Runner другими людьми). Можно ли иметь каждый класс Runner в отдельных папках и иметь папки в том же каталоге, что и основной класс, а затем ссылаться на объекты Runner в классе Main, как если бы они были классом в том же каталоге, что и основной класс?Как ссылаться на классы Java Object в отдельных папках

+0

Что? Почему бы не заставить Runner взять идентификатор и создать экземпляр во время выполнения? Что ты пытаешься сделать? –

+0

Да. Вы всегда можете объявлять любую переменную или ссылаться на какой-либо класс, используя полное имя типа (то есть имя класса, добавленное с именем пакета). Но почему?? –

+0

Вы можете динамически загружать классы во время выполнения через API-интерфейс Classloader. – MadProgrammer

ответ

0

Да, этот вопрос поражает меня, как будто вы просматриваете Java как php или ruby ​​и т. Д., Что не совсем точно. С Java каждый класс имеет то, что называется «Полностью квалифицированное имя», которое происходит из папки, в которой она хранится (например, Python). Поскольку Java компилируется, вы сообщаете компилятору , где нужно найти код, необходимый для компиляции java-файла, вместо того, чтобы помещать ссылку на эти необходимые файлы в верхней части файла (например, заявление require в php), которое было бы инструкция для переводчика .

Скажем, например, вы имели структуру, как это:

src/ 
    Main.java 
    /runner1 
    SomeRunner.java 
    /runner2 
    SomeOtherRunner.java 

Main.java

public class Main{ 
    public static void main(String[] args){ 
    //use SomeRunner 
    runner1.SomeRunner.run(); 
    //use SomeOtherRunner 
    runner2.SomeOtherRunner.run(); 

    } 
} 

SomeRunner.java

package runner1; 
public class SomeRunner{ 
    public void run(){ ... } 
} 

SomeOtherRunner.java

package runner2; 
public class SomeOtherRunner{ 
    public void run(){ ... } 
} 

В качестве альтернативы, вы можете использовать импорт:

Main.java

import runner1.SomeRunner; 
import runner2.SomeOtherRunner; 
public class Main{ 
    public static void main(String[] args){ 
    //use SomeRunner 
    SomeRunner.run(); 
    //use SomeOtherRunner 
    SomeOtherRunner.run(); 

    } 
} 

В этом примере я выбрал произвольные имена пакетов (runner1 и runner), который является технически хорошо. Однако в лучших практиках указано, что ваши имена пакетов должны быть обратным доменным именем вашего проекта (т. Е. com.myproject), чтобы избежать столкновений с другими библиотеками и т. Д. Вы можете узнать больше об этом here. Когда вы компилируете свой класс Main, вам нужно будет предоставить файлы SomeRunner и SomeOtherRunner компилятору, чтобы он знал, где их найти.

+0

Благодарим вас за предложения, но я не думаю, что это точно соответствовало бы тому, что я имел в виду.Я хочу, чтобы иметь возможность рассматривать каждый из классов Runner как один класс Runner, по существу, иметь возможность хранить их все в структуре данных, такой как массив или ArrayList, и использовать цикл for, чтобы увидеть, как все они выполняются в одиночный осуществление. Я пытался сделать это с вашими предложениями, и я даже экспериментировал с ними, но безрезультатно. Есть ли какие-либо предложения, которые вы хотели бы решить? – Noah

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