Используйте два класса в одном файле Java - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть файл TestClass.java

package com.fido.android.sample.dsm.SoftPin.Core;

public class TestClass
{
   public int mValue1;
   public String mValue2;
}

Сейчас в этом файле ( TestClass.java ) Я хочу объявить еще один класс, но когда я пишу, например:

public class SecondClass
{
    // Class members goes here.
}

Компилятор не позволяет мне сделать это, если я удаляю public все в порядке, но я могу использовать SecondClass только в TestClass.java , я не могу написать

SecondClass sc = new SecondClass();

из TestClass.java учебный класс.Теперь я хочу знать, есть ли способ сделать это, иметь два класса в одном файле и использовать их повсюду (не внутренние классы).

Ответы [ 7 ]

3 голосов
/ 28 ноября 2011

Вопрос: зачем вам объявлять второй открытый класс в том же файле классов Java?В Java существует правило, согласно которому каждый публичный класс должен быть объявлен в одном файле классов - за исключением вложенных классов, указанных Грэмом Борландом.

2 голосов
/ 28 ноября 2011

Краткий ответ: Вы не можете.

Вот как работает Java.

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

Вы можете использовать внутреннюю классификацию, как предложил Грэм, или, что еще лучше, переместить второй класс в новый файл.

1 голос
/ 28 ноября 2011

Нет, вы не можете, если компилятор выбирает принудительное применение этого правила из спецификации языка Java, , раздел 7.6 :

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

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

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

Так что это необязательно в том смысле, что все еще "разрешена Java" для включения более одного общедоступного класса верхнего уровня в один исходный файл - но компилятор также может отклонить его. На практике я думаю, что каждый файловый Java-компилятор, который я когда-либо использовал, применяет это правило.

Теперь вы можете попытаться найти другой компилятор, если вы действительно этого хотите, но есть причина для этого: Java-программисты привыкли находить исходный код для общедоступного типа верхнего уровня (и обычно любой тип верхнего уровня) в исходном файле с тем же именем.

Задавать вопрос возврата вызывающе: почему вы хотите усложнить навигацию по исходному коду?

1 голос
/ 28 ноября 2011

Если у вас есть SecondClass внутри TestClass (т. Е. Вложено в определение класса) с публичной видимостью, тогда вы можете ссылаться на TestClass.SecondClass везде.

0 голосов
/ 28 ноября 2011

Поскольку публичные классы должны иметь то же имя, что и исходный файл, внутри файла Java может быть только один класс pulbic.

0 голосов
/ 28 ноября 2011

Согласно Java-соглашениям, публичный класс должен быть создан в отдельном файле, имя которого совпадает с именем класса.

Таким образом, вы не можете создать два открытых класса в одном файле.

вы можете попробовать удалить public из одного класса или создать внутренний класс.

0 голосов
/ 28 ноября 2011

Вы не можете.

Что вы можете сделать, это иметь внутренние классы .

...