GVKun编程网logo

使用Java中的import语句自动删除显式包声明(java中import怎么自动出来)

15

本文将带您了解关于使用Java中的import语句自动删除显式包声明的新内容,同时我们还将为您解释java中import怎么自动出来的相关知识,另外,我们还将为您提供关于ABAP的include关键字

本文将带您了解关于使用Java中的import语句自动删除显式包声明的新内容,同时我们还将为您解释java中import怎么自动出来的相关知识,另外,我们还将为您提供关于ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较、Angular 2中的Import语句顺序、from import语句、IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)的实用信息。

本文目录一览:

使用Java中的import语句自动删除显式包声明(java中import怎么自动出来)

使用Java中的import语句自动删除显式包声明(java中import怎么自动出来)

我有一个由其他人创建的项目,其中包含成千上万个类文件,并且为每个对其类的引用都显式键入了包名。看起来代码是反向工程的。Java是否有一个很好的工具来重构代码,以便从类引用中删除显式键入的包前缀,并将其移入import语句。

先感谢您。

编辑:

我认为一个例子会有所帮助。我想把进口放在最前面,我不在乎有多少进口。

javax.swing.JButton button1 = new javax.swing.JButton();

想象上面的代码,但绝对可以在数千个类文件中的成千上万行代码中的任何地方。我希望能够删除所有前缀,并且只需导入javax.swing.JButton就可以了;在每个类文件的顶部。

答案1

小编典典

我不知道用于这种用例的工具,但是几个月前我不得不做类似的事情。

  • 编写脚本或使用正则表达式进行搜索替换,以摆脱显式键入的包前缀。

  • 让eclipse使用“组织进口”来完成其余的工作。Ctrl-1

提示:为避免歧义,请使用不超过所需库的类路径来设置类路径。我花了2个小时完成了大约800堂课。

  • 或找一个值得做的工作。

编辑:您应该知道,在Prefeneces / Java / Editor / Save Actions中,可以将Organize导入配置为save动作。

ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较

ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较

ABAP

使用关键字重复引入一个include program,会报syntax error:

原因是因为ABAP对include这个关键字的实现和其他编程语言有点不一样,在激活时简单地把被include的program的全部源代码替换原程序里INCLUDE incl这一行,所以重复引入一个include program会报错。

值得一提的是,ABAP report悄悄得include了很多标准的program,比如<sysini>.

因此如果再次重复引入,同样的会遇到语法错误。

import in Java

Java的import和ABAP的include关键字实现的效果不一样,在Java里使用import引入包名可以让程序猿少打些字,比如比较下图第13行和第15行的写法,明显前者要简洁一些。

因为import引入的是包名而不会像ABAP那样将包的源代码引入到使用了import的源程序,因此可以重复import。只是将Java编译器生成的.class反编译之后,会发现编译器自动将冗余的import移除,且自动引入了新的包java.io.printStream:

include in C

谭浩强老师的《C程序设计》一书中提到,编译器预处理时,要对#include命令进行"文件包含处理":将被include的头文件的全部内容复制到#include处。

那么C语言的include类似ABAP的关键字include。

例子:a.c里include标准的<stdio.h>:

这个头文件的位置: /usr/include

里面是一些宏定义和函数声明:

b.c里没有include这个头文件:

所以b.c编译生成的执行文件尺寸小于a.c:

import in C4C ABSL

同Java的import,不会对后台生成的ABAP代码有任何影响。

Angular 2中的Import语句顺序

Angular 2中的Import语句顺序

角度样式指南说明了导入行间距:

>考虑在第三方导入和第三方导入之间留下一个空行
申请进口.
>考虑列出按字母顺序排列的导入行
模块.
>考虑列出破坏的导入符号
按字母顺序排列.
>为什么?空行将你的东西与他们的东西分开
东西.
>为什么?字母顺序使读取和定位符号更容易.

观察包括Angular本身在内的许多Angular项目,惯例是首先导入Angular(@angular)模块,然后导入第三方模块(例如AngularFire2),然后导入我们自己的模块(服务,组件等),例如: ./some-service.ts.

再次看起来导入服务,然后是模型然后导入组件是惯例.

但接口和管道等呢?导入“无名”或通配符模块的惯例是什么,例如Firebase SDK或RxJs操作符?

例如:

导入RxJs运算符的示例服务

import { Injectable } from '@angular/core';

import { AngularFireAuth } from 'angularfire2/auth';
import {
  AngularFireDatabase,FirebaseListObservable
} from 'angularfire2/database';
import * as firebase from 'firebase/app';
import 'rxjs/add/operator/take';
...

要么

import { Injectable } from '@angular/core';

import {
  AngularFireDatabase,FirebaseListObservable
} from 'angularfire2/database';
import * as firebase from 'firebase/app';
import { Observable } from 'rxjs/Observable';

import { AuthService } from './auth.service';
// `GridMetadata` is an Interface
import { GridMetadata } from './grid-Metadata';
...

解决方法

实际上,查看Angular代码库并更好地理解指南,有一个答案.

“考虑在第三方导入和应用程序导入之间留下一条空行.”

这只是一个例子来解释它:

// Core imports
import { Testbed,async,inject } from '@angular/core/testing';

// Third party imports
import { AngularFireAuth } from 'angularfire2/auth';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/observable/of';

// Application imports
import { AuthService } from './auth.service';
import { environment } from '../environments/environment';

“考虑列出由模块按字母顺序排列的导入行.”

将“模块”视为“来自”之后的位.模块包含要导入的符号.

import { Injectable } from '@angular/core';

import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/catch';

符号是什么并不重要;重要的是导入行由模块按字母顺序排列.例如

> angularfire2 / auth
> firebase / app
> rxjs / Rx
> rxjs / add / observable /
> rxjs / add / operator / catch

在Angular代码库中,很明显小写字符列在大写或大写字符之后,因此:’rxjs / Rx’列在’rxjs / add / observable / of’和’rxjs / add / operator / catch’之前

“考虑按字母顺序列出破坏的导入符号.”

import { Testbed,inject } from '@angular/core/testing';

import { AngularFireAuth } from 'angularfire2/auth';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/observable/of';

将“结构化导入符号”视为已从其父模块中提取的导出符号.在这个例子中,AngularFireAuth,Observable,Testbed,async和inject都是解构的导入符号.

同样,订单按字母顺序排列;首先是大写,然后是大写,然后是小写.以下是Angular代码库的一个很好的例子:

import {CUSTOM_ELEMENTS_SCHEMA,Compiler,Component,Directive,Inject,Injectable,Injector,Input,NgModule,Optional,Pipe,SkipSelf,ɵstringify as stringify} from '@angular/core';

在Angular代码库中导入服务,管道,模型,指令或组件等似乎没有任何特定顺序

注意,父目录中的模块是在更靠近它们被导入模块的模块之后导入的.

import { AuthService } from './auth.service';
import { environment } from '../environments/environment';
import { abc } from '.../abc';

from import语句

from import语句

*)假如导入出现了问题,那么一定是导入的文件里的语法问题或者其他问题

  参考链接:http://www.cnblogs.com/hwf-73/p/5493328.html

1)导入时重命名 as

from matplotlib import pyplot as plt
#使用
fig=plt.figure(1,figsize=(4,3))

2)只导入部分 

from matplotlib import animation
#使用
anim=animation.FuncAnimation(fig,animate,frames=len(frames),interval=frame_interval,repeat=True)


#这样使用不行
Traceback (most recent call last):
  File "visualization_sort.py", line 59, in <module>
    plt,_=draw_chart(''random'')
  File "visualization_sort.py", line 55, in draw_chart
    anim=matplotlib.animation.FuncAnimation(fig,animate,frames=len(frames),interval=frame_interval,repeat=True)
NameError: name ''matplotlib'' is not defined

#增加一行导入(还是不行)
import matplotlib
(sort) λ python visualization_sort.py
Traceback (most recent call last):
  File "visualization_sort.py", line 59, in <module>
    plt,_=draw_chart(''random'')
  File "visualization_sort.py", line 55, in draw_chart
    anim=matplotlib.animation.FuncAnimation(fig,animate,frames=len(frames),interval=frame_interval,repeat=True)
AttributeError: module ''matplotlib'' has no attribute ''animation''

 

别的一些正确的导入:

from Data import Data#因为第一个Data代表的是Data.py里的Data,第二个代表的是class Data:里的Data
使用
b=data[Data.data_count//4,Data.data_count//2]

#若是import Data
AttributeError: module ''Data'' has no attribute ''data_count''

Data.py里代码
class Data:
    
    data_count=32
    
    def __init__(self,value):
        self.value=value
        self.set_color()

    def set_color(self,rgba=None):
        if not rgba:
            rgba=(0,
                1-self.value/(Data.data_count*2),
                self.value/(Data.data_count*2)+0.5,
                1)
        self.color=rgba

  

  能重命名

from bubble_sort import bubble_sort as bubble
#使用
frames=bubble(original_data_object)

  

  

  还没有明白为什么要构造出这样一种另外的方式

  他精准的并且只导入你想要的,但有时会出现这样的情况

>>>form timeit import timeit   #只导入了timeit.timeit
>>> timeit.default_timer()    #而这个方法是第一个timeit模块的方法
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    timeit.default_timer()
AttributeError: ''function'' object has no attribute ''default_timer''
>>> import timeit
>>> timeit.default_timer()
370.277480676
>>>

  可以这样替换

#这段代码与下面代码效果相同
from timeit import timeit
timeit(''x=1'',number=100)
#这是另一种替换方式
import timeit
timeit.timeit(''x=1'',number=100)

  有些模块构建对象时也可以这样用

>>> x=prettytable()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ''module'' object is not callable
>>> from prettytable import PrettyTable
>>> x=PrettyTable()
>>>

  问题

1)ImportError: cannot import name ''bidirectional_bubble_sort''

Traceback (most recent call last):
  File "test_and_compared.py", line 1, in <module>
    from bidirectional_bubble_sort import bidirectional_bubble_sort
ImportError: cannot import name ''bidirectional_bubble_sort''

  原因:因为文件没有保存

IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)

IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)

JetBrains公司的intellij Idea堪称JAVA编程界的苹果,用户体验非常好

下面介绍一下IDEA的一个能显著提升写代码效率的非常好用的功能设置—— Auto Import

 

Auto Import的功能是可以帮助我们自动删除无用的包Import(未被引用),以及自动Import填充尚未导入的包。完全智能化地帮助我们在开发程序时,省略了导包的操作,大大优化了开发的效率。

并且,当你移动某个类改变其路径的时候,这个功能会相应的改变关联的文件中包的路径。

堪称神器。

 

下面是Auto Import设置步骤详解。

Settings→Editor→General→Auto Import 
然后勾选Add unambiguous imports on the fly以及Optimize imports on the fly

 

Add unambiguous imports on the fly:快速添加明确的导入。

Optimize imports on the fly:快速优化导入,优化的意思即自动帮助删除无用的导入。

今天关于使用Java中的import语句自动删除显式包声明java中import怎么自动出来的介绍到此结束,谢谢您的阅读,有关ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较、Angular 2中的Import语句顺序、from import语句、IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)等更多相关知识的信息可以在本站进行查询。

本文标签: