【问题标题】:using package name to create objects in Java使用包名在 Java 中创建对象
【发布时间】:2013-01-25 09:38:44
【问题描述】:

我正在查看其他人的代码,他们使用包名称对其进行编码。

String filename = "";

java.io.PrintWriter writer;

writer = new java.io.PrintWriter(new java.io.FileWriter(filename));

如果没有用包名编码,语法是否等同?既然Java允许,那么用包名编码有什么用吗?

【问题讨论】:

    标签: java object package


    【解决方案1】:

    如果:

    1. 您需要在同一个源文件中使用两个同名的类。
    2. 无论出于何种原因,您都没有import 正在使用的类。 (通常是精神错乱。)
    3. imported 类,但仍然使用包名,因为我不知道。

    【讨论】:

    • 同一个源文件中有两个同名的类。所以可以这样编码(仍然看起来像精神错乱)。谢谢!
    • @Nicholas 这是编写 Java 的一种完全有效的方式,它只是 - 以我的经验 - 非常非常少必要,并且比使用imports 对任何人的可读性都要低熟悉 JDK。因此出现了“精神错乱”的评论。
    【解决方案2】:

    使用fully-qualified names 在语义上与给定的类导入相同。

    FQN 的一种可能用法是,如果您需要使用两个具有相同名称但不同的类 包。

    import java.util.Date;
    
    Date date = new Date();
    java.sql.Date sqlDate = new java.sql.Date(date);
    

    【讨论】:

      【解决方案3】:

      您可以使用包名,代码仍然完全相同,您只需从程序顶部的包java.io 导入类:

      import java.io.PrintWriter;
      import java.io.FileWriter;
      
      String filename = "";
      PrintWriter writer;
      
      writer = new PrintWriter(new FileWriter(filename));
      

      【讨论】:

        【解决方案4】:

        您可以编写包含其包的类名以避免歧义,例如在您的程序中有两个名为 PrintWriter 的类,java.io.PrintWriter 将采用 java.io 中的一个。

        即使在“标准”类中也有相当多的重复名称,这并不奇怪 - 例如,日期存在于 java.util 和 java.sql 中,队列存在于 java.util 和 javax.jms 中 - 所以你会遇到这种结构时不时地。

        【讨论】:

        • 哦,我明白了!这对 Java 来说非常简洁!
        猜你喜欢
        • 2018-05-06
        • 1970-01-01
        • 2013-12-12
        • 1970-01-01
        • 2015-02-21
        • 1970-01-01
        • 2015-03-27
        • 1970-01-01
        • 2020-02-27
        相关资源
        最近更新 更多