代码之家  ›  专栏  ›  技术社区  ›  Leo Izen

在java.io.File中找不到构造函数文件()

  •  0
  • Leo Izen  · 技术社区  · 15 年前

    这可能是显而易见的,所以请容忍我。


    问题是,当我尝试扩展java.io.File时,它会说“在java.io.File中找不到构造函数File()”,尽管我正在重写java.lang.Object中的默认构造函数。

    这是我的密码:
    AbsRelFile.java文件

    import java.io.File;
    public class AbsRelFile  extends File {
        File f;
        private AbsRelFile(){
    
        }
    }
    

    这给了我一个错误,即使我重写了构造函数。

    注:本课程尚未结束。不要评论为什么我不需要这个,或者评论这个类是怎么没用的。在我犯这个错误之前我刚开始写。

    7 回复  |  直到 15 年前
        1
  •  8
  •   Nate W.    15 年前

    super(...) 在默认构造函数中,它隐式地尝试调用超类的默认构造函数,正如您所指出的,在这种情况下,超类不存在(super是 File ). 解决问题的方法是在默认情况下调用超级构造函数 AbsRelFile() 超级(…) 使用一些默认值。

        2
  •  5
  •   samitgaur    15 年前

    定义构造函数时,Java会将对超级构造函数的隐式调用作为构造函数的第一行。所以你的构造器相当于:

    private AbsRelFile(){
        super();
    }
    

    因为在超类中没有默认的构造函数 File ,它给出了一个错误。要解决此问题,需要将对超级类构造函数的显式调用作为第一行:

    private AbsRelFile(){
        super("fileName");
    }
    

    AbsRelFile 构造函数也可以传递给超级调用。

    Object 类构造函数。你只是在定义一个 AbsRelFile文件 班级。

        3
  •  1
  •   John Flatness    15 年前

    要避免这种情况,请调用实际定义的文件构造函数。

        4
  •  1
  •   Tore A.    15 年前

    Java会自动在空构造函数中放入对super()的调用,这就是出现错误的原因。

        5
  •  0
  •   Stephen C    15 年前

    问题是你的 AbsRelFile 尝试 调用的无参数构造函数 File

    private AbsRelFile() {
        super();
    }
    

    你要确保你 明确地 调用 文件 建造商

    private AbsRelFile() {
        super("dummy");
    }
    

    显然,您将需要找出一个安全/无害/适当的超类构造函数和参数,以用于您的特定用例(我一点也不知道这是怎么回事 AbsRefFile 真的应该是。。。所以我不能就此提出建议。)

    super(...) 呼叫。。。或者默认情况下Java插入的隐式。

        6
  •  0
  •   Stian Soiland-Reyes    15 年前

    首先,我希望您的字段“filef”与尝试访问超类无关,而是与“Rel”或“Abs”有关。。

    其他海报正确地指出,隐式默认构造函数(AbsRelfile())将尝试调用super()——它不存在。因此,唯一的解决方案是生成一个传递一些有效参数的构造函数。

    如果您试图“包装”整个java.util.File类(比如在创建自己的异常时),您可能应该为每个原始构造函数提供一个包装器。像Eclipse这样的现代ide应该可以右键单击。

    如果您需要一个实际的、临时的文件来处理,您可以执行以下操作:

    public class AbsRelFile() {
         public AbsRelFile() {
               super(File.createTempFile("AbsRelFile", "tmp").getAbsolutePath());
         }
    }
    

    .. 但我很困惑,为什么你要在第一时间子类文件。

        7
  •  0
  •   houman001    15 年前

    当您使用参数定义构造函数时(如在File类中),Java编译器不会为您生成默认构造函数。