Можно ли как-то дать классу другое имя файла в Java с Eclipse? - PullRequest
0 голосов
/ 21 февраля 2012

Как уже сказано в заголовке, я хотел бы знать, возможно ли каким-либо образом дать классу другое имя файла в Java с Eclipse?

Редактировать: я только хочу знать, возможно ли это с Eclipse. Если вы не знаете ответа, не поддавайтесь желанию отвечать снисходительными ответами.

Edit2: это весело, какие ответы я получаю здесь. Все, что я хотел знать, это возможно ли иметь класс с другим именем файла (и я имел в виду открытый класс) и ничего больше. Я думал, что это такой форум, чтобы задавать эти вопросы, но второй ответ, который я получил, уже был оскорблением. Это какой-то табуированный вопрос или что происходит?

Ответы [ 5 ]

7 голосов
/ 21 февраля 2012

Ваше имя файла всегда должно соответствовать имени вашего класса, концу истории.Хотя JLS специально не заявляет, что это ДОЛЖНО быть сделано, они оставляют на усмотрение реализации компилятора решение.Я почти уверен, что большинство (если не все) не позволят вам отличаться от этого стандарта.

В JLS говорится:

Когда пакеты хранятсяв файловой системе (§7.2.1), хост-система может выбрать ограничение, что это ошибка времени компиляции, если тип не найден в файле с именем, состоящим из имени типа плюс расширение (например,как .java или .jav), если выполняется одно из следующих условий:

  • На тип ссылается код в других единицах компиляции пакета, в котором объявлен тип.
  • Тип объявлен как открытый (и поэтому потенциально доступен из кода в других пакетах).

Это ограничение подразумевает, что на каждую единицу компиляции должно быть не более одного такого типа.Это ограничение облегчает компилятору языка программирования Java или реализации виртуальной машины Java поиск именованного класса в пакете;например, исходный код для общедоступного типа wet.sprocket.Toad будет найден в файле Toad.java в каталоге wet / sprocket, а соответствующий объектный код будет найден в файле Toad.class в том же каталоге.

Так что, хотя вы можете переименовать сам файл в eclipse или в вашей файловой системе - вы, скорее всего, столкнетесь с ошибкой компиляции.

3 голосов
/ 21 февраля 2012

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

Допустим, у вас class YourClass сохранено в файле OtherName.java.Если вы создадите символическую ссылку на этот файл следующим образом:

Система UNIX: (наверняка не работает в Solaris - другие системы не проверены)

ln -s OtherName.java YourClass.java
javac YourClass.java

Система WINDOWS: (работает в Windows Vista / 2008 +)

mklink YourClass.java OtherName.java
javac YourClass.java

компилятор находит тип и компиляция работает ...


Это решение не проверено в системах Unix, но наверняка работает в Windows Vista / 2008 + ..

1 голос
/ 21 февраля 2012

ниже приведены ситуации, когда у вас может быть другое имя класса.

1.class не является публичным классом и существует в java-файле, где определен хотя бы один публичный класс

class notpublic{

}
public class PublicClass {

}

2. Класс InnerClass.

public class PublicClass {

        class InnerClass{

        }
    }
1 голос
/ 21 февраля 2012

Нет, открытый класс Java и файл должны иметь одно и то же имя.

Если вы попытаетесь присвоить классу другое имя, компилятор завершится с

class YourClass is public, should be declared in a file named YourClass.java

НоВы можете объявить дополнительные частные классы в файле, который содержит открытый класс.

1 голос
/ 21 февраля 2012

Что Eclipse имеет с соглашениями об именах или правилами языка программирования Java?Eclipse - это просто IDE, и если вы работаете с Java, вы должны соблюдать ее правила.

Допустим, у вас есть файл X.java.Это означает, что в этом файле может быть только один public / abstract / final class named X.Не существует ограничений по количеству классов и их именам, а также по отношениям вложенности друг с другом , поскольку не более чем один класс содержит имя файла в качестве имени класса.Если класс принимает имя файла, то он должен иметь один или несколько из следующих модификаторов: public, static, final. Это история.

...