有没有办法自动转换这个静态方法调用(Arrays.asList):
import java.util.Arrays;
import java.util.List;
public class StaticImport {
public static void main(String[] args) {
List<String> list = Arrays.asList("hello", "world");
System.out.println(list);
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下命令进行此调用static import:
import static java.util.Arrays.asList;
import java.util.List;
public class StaticImport {
public static void main(String[] args) {
List<String> list = asList("hello", "world");
System.out.println(list);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用此配置代码完成Window » Preferences » Java » Editor » Content Assist » Favorites,如本答案中所述.
我的问题是关于转换现有的静态方法调用.理想情况下,我不想配置"最喜欢的导入".
我无法为以下场景找到正确的重构选项:
我有这样的代码(在Outer.java中):
public class Outer {
// ... class stuff
public static class Inner {
// ... inner class stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来选择Inner,并将其转换为顶级类,在它自己的.java源文件中.我知道这很容易用复制/粘贴等手动完成,但内部类在很多地方被引用,我希望refactor选项能够处理它所引用的任何地方的变化.
我已经尝试过这个选项,Refactor -> Extract Class...但是对于一个data我不太了解的字段做了一些奇怪的事情.
Eclipse版本是3.5.1 Galileo.
如何将静态内部类重构为顶级类?
编辑:不敢相信我忽略了这样做的选择.感谢您的所有正确答案,给大家+1.我仍然需要接受一个答案,所以如果有更多有用的信息,例如与脚本有关,那么仍然有一个留下答案的目的.
最近我发现自己在编码风格方面使用了R代码 - 多个作者和个人作者,他们并不严格遵守单一结构.有些任务我想比现在更好地自动化.
我正在寻找一种管理以下任务的工具(或多种工具) - 按照欲望的增加顺序列出,但也有点依赖于存在的怀疑主义.
基本格式.比如将"if(foo)"转换为"if(foo)"并在支撑位置和类似物方面实现一致性.
将"foo $ blah"转换为"foo [["blah"]]"以获取列表访问权限.理想情况下,它至少可以猜测一个对象是否真的是一个列表而不是data.frame并且只能转换列表.
将'='转换为'< - '.是的,这是一个简单的搜索和替换 - 但不是真的.工具(或regexp)需要具有语言感知能力,以便它知道转换"x = 5"而不是"foo(x = 5)".不仅简单地替换符号而且确保赋值运算符两侧的单个空格也是非常好的.
变量重命名,特别是跨功能和文件.例如,假设一个列表有一个元素"foo",我希望能够将它改为"foobar"一次,而不必在整个代码流中追踪该列表的每个用法.我想这将需要该工具能够进行整个控制流程,以便识别诸如在不同函数中作为另一个名称存在的列表之类的事物.
命名约定.我希望能够定义一些标准的命名约定(例如Google或其他)并让它识别所有函数,变量等并转换它们.请注意,这与列表元素之类的内容相关联.
随意列出基本的unix处理命令(例如sed),只要它真的足够智能,至少通常不会搞砸(例如将"foo(x = 5)"转换为"foo(x <-5)" ").
我猜测,如果这样的工具,我会听到它的一个完美的状态现在已经存在了,而且我也意识到,与如R语言,很难做一些这些类型的变化的自动的,但是人们可以做梦吧?有没有人对这些/所有这些有指针?
我需要更改整个代码库中使用的方法的签名.
具体来说,该方法void log(String)将需要两个额外的参数(Class c, String methodName),这些参数需要由调用者提供,具体取决于调用它的方法.我不能简单地通过null或类似.
为了了解范围,Eclipse发现了7000个对该方法的引用,因此如果我更改它,整个项目将会失效.我需要几周时间才能手动修复它.
据我所知,Eclipse的Eclipse重构插件不能完成任务,但我真的想让它自动化.
那么,我怎样才能完成工作?
有两种主要的重构工具可以为Visual Studio安装,提供C++支持.这两个工具的完整版本是250美元,它们似乎提供类似的功能.他们是:
哪个工具更好?
编辑:我对这些工具的初步评估似乎是Refactor Pro/CodeRush有更多的功能,但偶尔也有很多错误.它似乎并不喜欢宏: http://billy-oneal.com/forums/4-9-2010%2010-31-50%20PM.png 这里的视觉辅助的相同的解释: HTTP:// billy- oneal.com/forums/4-10-2010%201-52-24%20AM.png
编辑2:我认为我喜欢CodeRush而不是Visual Assist,但我不确定我是否可以信任CR.CodeRush似乎在解析一些C++结构时遇到了问题,比如上面的宏.但它的UI是很多更精致.例如:http: //billy-oneal.com/forums/4-10-2010%201-37-12%20AM.png
另一方面,Visual Assist X似乎在C++开发人员中有更大的追随者,而且它的代码分析要好得多.它似乎没有像R一样出错!Pro正在不时制作.
我想在这一点上我只需要使用这两种工具,看看哪一种更有用.但是,如果有人用任何一种工具制作恐怖/成功故事,我仍然很好奇.
我即将开始研究一个涉及重构和修改c&c ++中现有代码的项目.代码是一个膨胀的代码,并且数量巨大.当然,由于代码需要修改,因此我们必须在非常短的时间内开发对代码的理解,因为我们有一些非常紧迫的项目进度表.任何人都可以建议任何有助于实现上述目标的开源工具.总之,我正在寻找的工具可以:
请告诉我任何值得关注的经历,偏好或收藏.
[编辑]想出了上面提供帮助的工具列表.这是清单:
UMLStudio
为您的OO遗留代码创建对象模型是分析,理解和维护它的最佳方法.UMLStudio可以比任何其他CASE工具更快地将C++,Java,CORBA IDL,PHP 5和Ada 95代码转换为OOA和D表示法.
CodeDrawer for C++
The CodeDrawer converts source code to visual based diagrams. Class, struct, and any elements of source code can be shown diagrams. It also shows the logics of a function and a method. The CodeDrawer helps understand source code of your project
Imagix
Reverse engineering and visualization of source code lead to improved program comprehension. Speeds:
Learning Unfamiliar Code
Change Impact …
我有界面
public interface ObjectBuilder<E> {
E buildObject();
}
Run Code Online (Sandbox Code Playgroud)
此外,该项目有很多类实现非泛型版本的接口.
class MyClassBuilder implements ObjectBuilder {
public MyClass buildObject() {/**/}
}
Run Code Online (Sandbox Code Playgroud)
是否可以自动转换所有这些类,以便它们实现了接口的通用版本?
自动重构到这个:
class MyClassBuilder implements ObjectBuilder<MyClass> {
public MyClass buildObject() {/**/}
}
Run Code Online (Sandbox Code Playgroud)
是否有内置或插件Intellij IDEA?还是在其他IDE?
java generics refactoring intellij-idea automated-refactoring
我正在进行大规模的重构.
我有很多方法,通过位置参数调用.现在我想通过命名参数调用它们.这些方法存在于几个非继承的类中,并且具有相同的名称,并且它们的签名不同.例:
定义
public class Foo
{
public static Foo Create(int count, string name)
{
...
}
}
public class Bar
{
public static Bar Create(string description, bool yesNo, float factor)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我想要替换的电话
public void CreateSomeObjects()
{
var foo = Foo.Create(123, "foo");
var bar = Bar.Create("bar", true, 1.23);
}
Run Code Online (Sandbox Code Playgroud)
至
public void CreateSomeObjects()
{
var foo = Foo.Create(count: 123, name: "foo");
var bar = Bar.Create(description: "bar", yesNo: true, factor: 1.23);
}
Run Code Online (Sandbox Code Playgroud)
我使用Visual Studio Premium 2013和Resharper.任何想法如何实现这一目标?(我只需要一个提示,没有完整的解决方案.)
c# resharper refactoring automated-refactoring visual-studio
这个问题是一个跟进这个.
说我有一些课Foo.
class Foo {
protected String x = "x";
public String getX() {
return x;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个程序使用Foo并违反了LoD(Demeter法则).
class Bar {
protected Foo foo;
public Bar() {
this.foo = new Foo();
}
public Foo getFoo() {
return foo;
}
}
public static void main(String [] args) {
Bar bar = new Bar();
String x = bar.getFoo().getX();
}
Run Code Online (Sandbox Code Playgroud)
我可以通过两个步骤重构此代码以使用LoD.
bar.getFoo().getX()- > getFooX(bar)(提取到方法,也可以查找和替换出现)getFooX(bar)- > bar.getFooX()(转到实例方法,也找到并替换出现)使用的程序Bar不再违反LoD. …
java refactoring intellij-idea law-of-demeter automated-refactoring
当我在Android项目上工作时,我想使用一些神奇的快捷方式将我的字符串提取到strings.xml,并允许我更改密钥.有没有?
如果没有,有没有办法开发新的重构方法并扩展IntelliJ的可能性?