IntelliJ IDEA默认如何排序导入?

4

我进行了一些调查,并得到了奇怪的结果。 我的课程:

Test.java:

package com.company;

import com.company.data.Byte;
import com.company.data.Class;
import com.company.zata.Long;
import com.company.zata.Short;
import com.company.data.*;
import com.company.zata.*;


public class Test {
    Object o1 = new Class();
    Object o2 = new SomeClass();
    Object o3 = new AppleClass();
    Object o4 = new Byte();
    Object o5 = new Long();
    Object o6 = new Short();
    Object o7 = new BetaClass();

}

所有的类都很简单,只是为了测试。例如其中之一:
package com.company.data;

public class Class {
    public Class() {

    }
}

类的树状结构:

Tree of classes

我是一位有帮助的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我尝试为Intellij IDEA、Eclipse和Netbeans整理导入,并得到了以下结果:

整理导入前的Intellij IDEA:

import com.company.data.Byte;
import com.company.data.Class;
import com.company.zata.Long;
import com.company.zata.Short;
import com.company.data.*;
import com.company.zata.*;

Intellij IDEA整理导入后:

import com.company.data.Byte;
import com.company.data.Class;
import com.company.data.*;
import com.company.zata.*;
import com.company.zata.Long;
import com.company.zata.Short;

Eclipse 在整理导入之前:

import com.company.data.Byte;
import com.company.data.Class;
import com.company.zata.Long;
import com.company.zata.Short;
import com.company.data.*;
import com.company.zata.*;

Eclipse整理导入后:

import com.company.data.*;
import com.company.data.Byte;
import com.company.data.Class;
import com.company.zata.*;
import com.company.zata.Long;
import com.company.zata.Short;

NetBeans在整理导入之前:

import com.company.data.Byte;
import com.company.data.Class;
import com.company.zata.Long;
import com.company.zata.Short;
import com.company.data.*;
import com.company.zata.*;

NetBeans整理导入后:

import com.company.data.Byte;
import com.company.data.Class;
import com.company.data.*;
import com.company.zata.*;
import com.company.zata.Long;
import com.company.zata.Short;

Eclipse按字母顺序排序导入。

如何在Intellij IDEA和NetBeans中排序导入 - 我不理解。 我期望在Intellij IDEA和NetBeans中得到这些结果:

import com.company.data.Byte;
import com.company.data.Class;
import com.company.data.*;
import com.company.zata.Long;
import com.company.zata.Short;
import com.company.zata.*;

为什么Intellij Idea和Netbeans以这种方式排序导入?
3个回答

1
重点是:你为什么期望不同的工具在第一时间就表现得完全相同呢?!
你看,这些不同的IDE使用不同的规则来确定如何组织导入;当然,这些规则可以进行调整。
请查看此示例以了解如何使IntelliJ的行为类似于eclipse;并在此处编辑Netbeans设置以进行此操作。

我不明白为什么在 import com.company.data.Class; 之后是 import com.company.data.;,但在 import com.company.zata.Long; 之前是 import com.company.zata.;? 我想了解算法。 - Pavlo Dudchenko
为什么?因为您可能会在同一项目/公司中使用这两个工具,并且您可能希望最小化导入声明的不断修改。 - arpadf

0

这只是我的猜测。

我所看到的是,IntelliJ和Netbeans都试图尽量少地移动导入。看看这两个.*导入如何粘在一起?我认为这是因为在它组织导入之前,它们也粘在一起了。

这两个编辑器看到,如果他们仅将最后两行向上移动,并使第三和第四行替换最后两行的位置,则包名称将按字母顺序排序!所以他们就这样做了。

不幸的是,我无法亲自测试这一点。但是,如果您更改.*导入的初始位置,则组织导入的结果可能会改变。

尝试组织以下内容:

import com.company.data.Byte;
import com.company.data.Class;
import com.company.zata.Long;
import com.company.data.*;
import com.company.zata.Short;
import com.company.zata.*;

如果我猜得没错的话,编辑器会交换第三行和第四行。


我得到了相同的结果。 - Pavlo Dudchenko

0

我使用Intellij IDEA 15.0.1得到了结果。 如果我们尝试使用最新版本的Intellij IDEA来组织导入,我们会得到以下结果:

import com.company.data.Byte;
import com.company.data.Class;
import com.company.data.*;
import com.company.zata.Long;
import com.company.zata.Short;
import com.company.zata.*;

我认为这是正确的排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接