PDA

Просмотр полной версии : Можно ли создавать package с одним именем с классом?


Smirnov48
08.04.2008, 12:30
Хочу сделать подобную конструкцию.

com\test.as - главный класс
com\test\subtest1.as - другие классы, которые используются только в главном
com\test\subtest2.as

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

можно конечно сделать так

com\testPackege\test.as - главный класс
com\testPackege\subtest1.as
com\tesPackeget\subtest2.as

вот тут я в ступоре... как правильней?

Просто глазу вроде приятнее в коде писать так
new com.test()
нежели так
new com.testPackege.test()

iNils
08.04.2008, 13:03
У вас оба варианта не верные. Пакеты существуют не для приятности глаз, а для того, чтобы не возникло конфликов между одноименными классами различных авторов. Имя пакета как правило формируется из имени домена автора или проекта.
Мои классы имеют такой пакет ru.inils.имяПроекта.ИмяКласса
ru.inils.имяПроекта.подуровень.ИмяКласса
А пакеты данного форума (если бы они были)
ru.flasher.имяПроекта.ИмяКласса
ru.flasher.имяПроекта.подуровень.ИмяКласса
Заметьте, класс пишется с Большой буквы, а не с маленькой.

Для того, чтобы не писать постоянно имя пакета, нужно использовать import
Вместо
new com.testPackage.Test ()
new com.testPackage.Subtest ()
будет
import new com.testPackage.*
new Test ()
new Subtest ()

Smirnov48
08.04.2008, 13:51
Спасибо. Я понял: домен + обдуманная организация имен классов/пакетов - вот где счастье :)

PS. Простите, что в вел в заблуждение. Вот такая писанина даже не компилируется - com\test.as - главный класс
com\test\subtest1.as - другие классы, которые используются только в главном
com\test\subtest2.as

udaaff
08.04.2008, 14:00
А как вы ее компилируете?

Obi
08.04.2008, 15:18
С вашей структурой должно компилироваться так:

import com.test;
import com.test.*;
new test();
new subtest();
new subtest2();

Smirnov48
08.04.2008, 16:44
Если я делаю имя пакета, и имя класса разные, например com.test и com.Test - тогда все ок. Если одинаковые то, такая конструкция не помогает
import com.test;
import com.test.*;

все равно пишет
Имя класса "com.test.subtest" конфликтует с именем другого загруженного класса "com.test".

Кстати, заметил одну интересную ситуацию. Если я переправлю нормальную 19254 версию, на плохую 19255. не открывая subtest-ы. Тогда все компилируется. А стоит открыть поставить пробел, и сохранить, тогда все. Ошибка. Видимо кеш какой-то. Уже пару раз на этом об это спотыкался.

iNils
08.04.2008, 16:55
Еще раз повторяю
Заметьте, класс пишется с Большой буквы, а не с маленькой.

Smirnov48
08.04.2008, 17:00
просто, чтобы прояснить ситуацию.
Класс
com.Test
но если пакет
com.test.* Прошу прошения, постараюсь впредь не ошибаться.

А что вы можете сказать по поводу кеша самого редактора/компилятора?

iNils
08.04.2008, 17:04
Начиная с 7-го флеша переменные регистрозависимы.
Поэтому класс com.Test и пакет com.test.* не пересекутся.