嵌套命名空间中的 Java 类的别名

Posted

技术标签:

【中文标题】嵌套命名空间中的 Java 类的别名【英文标题】:Alias a Java class from nested namespaces 【发布时间】:2019-04-23 12:03:44 【问题描述】:

我有一个位于此处的 Java 类:

package suman;

public class Output 
 public static class foo 
   public static class PUT 
     public static interface basic 
       public static class req 
         public static class Body    // namespaced class "Body"
           String foo = "bar";
           int bar = 5;
           boolean zoom = false;
         
       
     

  

我是这样使用的:

import static suman.Output.foo;

public class FooImplementer 

  public void bar()
    foo.PUT.basic.req.Body x = new foo.PUT.basic.req.Body()
  

但是,这是很多字符,我正在寻找一种以某种方式为其别名的方法。我能想到别名的唯一方法是使用私有类,如下所示:

class Body extends foo.PUT.basic.req.Body 
     private JsonObject()

我可以这样使用它:

   public void bar()
       Body x = new Body()
    

是否有其他方法可以做到这一点?

【问题讨论】:

如果您的实际模型需要如此多的嵌套类,请更改您的模型;) 只需导入该类并使用其简单名称。 import suman.Output.foo.PUT.basic.req.Body;...Body x = new Body(); @azro 我希望,但是这个文件有很多类型,所以一个文件中有很多嵌套的东西 【参考方案1】:

只需使用普通导入:

import suman.Output.foo.PUT.basic.req.Body;

public class FooImplementer 
    public void bar()
        Body x = new Body();
    

【讨论】:

static 导入,而非正常导入。 应该是import static suman.Output.foo.PUT.basic.req.Body,因为它们是静态类。 @AlexanderMills 这与静态导入无关。静态导入用于导入另一个类的静态成员,因此您不必在它们前面加上类名。 @AlexanderMills 那么扩展它有什么帮助呢? 我认为他的扩展想法将允许将 a.long.Bodyanother.long.Body 别名化为两个较短的名称,不一定称为 Body。 @AlexanderMills Java does not provide import aliasing,不幸的是。

以上是关于嵌套命名空间中的 Java 类的别名的主要内容,如果未能解决你的问题,请参考以下文章

BackSlash(\),PHP 中命名空间别名中的命名空间分隔符

命名空间

在 C++ 中,啥是“命名空间别名”?

C# 命名空间别名 - 有啥意义?

命名空间和程序集

Resharper 无法识别 web.config 中的命名空间别名