我如何强制 eclipse火星重命名变量名? 当我尝试时,我得到了
由于语法错误,无法正确执行此重构 编译单位。
该对话框仅提供“取消”。
可以在旧版本的eclipse中执行此操作,并且我广泛使用了该功能,例如在网络上找到的代码片段的复制和粘贴之后。
请注意,这不是Refactoring variable names in Eclipse的重复。
编辑3(发生的事情摘要):
在代码中(如下所示)不仅是缺少导入或未声明变量等常见错误,而且还缺少“;”,因此真正的语法错误。这首先隐藏在其他几个编译问题中,导致eclipse拒绝重构。
事实证明,这不是火星的特殊功能,也不是旧版本的日食。
编辑:这是我的示例代码。它主要基于mongodb的tutorialspoint示例,但很可能与mongo没有任何关系。
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.MongoCredential;
import com.mongodb.client.MongoDatabase;
public class MongoDBJDBC2 {
private static String myUserName;
private static String myPassword;
private static String myHost = "localhost";
private static String myDatabaseName = "mydb";
private static MongoDatabase db;
public MongoDBJDBC2() {
initDb();
// TODO Auto-generated constructor stub
}
public static void main(String args[]) {
MongoDBJDBC2 mo = new MongoDBJDBC2();
}
private static void initDb() {
MongoClientURI uri = new MongoClientURI(
"mongodb://" + myUserName + ":" + myPassword + "@" + myHost + "/?authSource=db1");
try (MongoClient mongoClient = new MongoClient(uri);) {
db = mongoClient.getDatabase(myDatabaseName);
System.out.println("Connect to database successfully");
// boolean auth = db.authenticate(myUserName, myPassword);
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
public static void main4( String args[] ) {
try{
// To connect to mongodb server
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
// Now connect to your databases
DB db = mongoClient.getDB( "test" );
System.out.println("Connect to database successfully");
boolean auth = db.authenticate(myUserName, myPassword);
System.out.println("Authentication: "+auth);
DBCollection coll = db.getCollection("mycol");
System.out.println("Collection mycol selected successfully");
DBCursor cursor = coll.find();
while (cursor.hasNext()) {
DBObject updateDocument = cursor.next();
updateDocument.put("likes","200")
col1.update(updateDocument);
}
System.out.println("Document updated successfully");
cursor = coll.find();
int i = 1;
while (cursor.hasNext()) {
System.out.println("Updated Document: "+i);
System.out.println(cursor.next());
i++;
}
}catch(Exception e){
System.err.println( e.getClass().getName() + ": " + e.getMessage() );
}
}
}
我尝试在
中将db重命名为myDbprivate static MongoDatabase db;
以前我使用的是eclipse Helios,从未遇到过这种“功能”。
Edit2:我找到了致命错误。在方法“main4”中,在
之后缺少分号updateDocument.put("likes", "200")
仍然不明白为什么这会让eclipse如此沮丧,以至于它拒绝重构,我仍然想知道是否有办法强制重构,尽管有错误。
答案 0 :(得分:1)
编译器会发出两种错误:语法错误和所有其他类型的错误,例如“类型不匹配”和“未找到符号”。 Eclipse抱怨语法错误。您是否确定在之前的情况下Eclipse同意重构您的代码尽管它包含错误,但是您的代码包含 syntax 错误?你看,有一个大的区别。
重新编写java中的符号名称比简单的文本搜索和替换更为复杂,必须考虑代码的结构。
但是在语法错误的情况下,编译器放弃了解析你的文件,所以它不知道代码的结构:它不知道哪些标记是变量,哪些标记是类型,哪些标记是方法等等,所以它真的无法进行你想要的重构。
所以,如果你必须真正继续你的重构,尽管有语法错误,那么我担心在这种特殊情况下,文本搜索和替换是你的方式。
但是在尝试重构之前修复语法错误将是最谨慎的事情。
答案 1 :(得分:0)
当您的代码中出现编译问题时会发生这种情况。 修复编译问题,而不是重构你的代码。最近在eclipse的新版本中引入了这个功能。