在同一个java文件中使用两个类

时间:2011-11-28 09:48:50

标签: java android class declaration

我有文件 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一切正常,但我只能在 TestClass.java 中使用SecondClass < / strong>,我不能写

SecondClass sc = new SecondClass();

TestClass.java 类。现在我想知道是否有办法做这样的事情,在同一个文件中有两个类,并从各处使用它们(不是内部类)。

7 个答案:

答案 0 :(得分:3)

问题是:为什么要在同一个Java类文件中声明第二个公共类? Java中的规则是每个公共类必须在单个类文件中声明 - 除了Graham Borland指出的嵌套类。

答案 1 :(得分:2)

简答:你不能。

这就是Java的工作原理。

您只能为每个文件声明一个公共类,其类名与文件名相同。

您可以使用Graham建议的内部分类,或者更好的是,将第二个类移动到新文件中。

答案 2 :(得分:1)

如果SecondClassTestClass(即嵌套在类定义中),并且具有公开可见性,那么您可以在任何地方引用TestClass.SecondClass

答案 3 :(得分:1)

不,如果编译器选择从Java语言规范中强制执行此规则,则不能section 7.6

  

当软件包存储在文件系统(第7.2.1节)中时,如果在由以下文件组成的名称下的文件中找不到类型,则主机系统可以选择强制执行编译时错误的限制。如果满足以下任一条件,则输入类型名称加上扩展名(例如.java或.jav):

     
      
  • 该类型由声明类型的包的其他编译单元中的代码引用。
  •   
  • 该类型声明为public(因此可以从其他包中的代码访问)。
  •   
     

这个限制意味着每个编译单元最多只能有一个这样的类型。

所以这是可选,因为在单个源文件中包含多个公共顶级类仍然是“合法Java” - 但它对编译器拒绝它也是有效的。在实践中,我认为我曾经使用的每个基于文件的Java编译器都强制执行此规则。

现在你可以尝试找到一个不同的编译器,如果你真的想要,但是有一个原因:Java程序员习惯于找到公共顶级类型的源代码(通常是任何顶级类型)在具有相同名称的源文件中。

挑衅性地回答问题:为什么要让源代码难以导航?

答案 4 :(得分:0)

你不能。

您可以做的是inner classes

答案 5 :(得分:0)

根据java约定,应该在与类名相同的单独文件中创建公共类。

所以你不能在同一个文件中创建两个公共类。

你可以尝试从一个班级中删除公共或者创建内部班级。

答案 6 :(得分:0)

由于公共类必须与源文件同名,因此java文件中只能有一个pulbic类。