本文将带您了解关于使用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怎么自动出来)
- ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
- Angular 2中的Import语句顺序
- from import语句
- IDEA 实用功能Auto 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 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本身在内的许多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'; ...
解决方法
“考虑在第三方导入和应用程序导入之间留下一条空行.”
这只是一个例子来解释它:
// 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语句
*)假如导入出现了问题,那么一定是导入的文件里的语法问题或者其他问题
参考链接: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:自动优化导包(自动删除、导入包)
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:自动优化导包(自动删除、导入包)等更多相关知识的信息可以在本站进行查询。
本文标签: