gpt4 book ai didi

java - 如何在 eclipse mars 中强制重命名变量名称

转载 作者:行者123 更新时间:2023-11-30 07:46:32 25 4
gpt4 key购买 nike

如何强制 eclipse mars 重命名变量名称?当我尝试时,我得到了

This refactoring cannot be performed correctly due to syntax errors in the compilation unit.

该对话框仅提供“取消”。

在旧版本的 Eclipse 中可以做到这一点,并且我广泛使用了该功能,例如在复制和粘贴在网上找到的代码片段之后。

请注意,这不是 Refactoring variable names in Eclipse 的重复项.

编辑 3(所发生事件的摘要):

在代码中(如下所示)不仅存在诸如缺少导入或未声明变量之类的常见错误,而且还缺少“;”,因此是真正的语法错误。这最初隐藏在其他几个编译问题中,导致 Eclipse 拒绝重构。

事实证明,这不是 mars 的特殊功能,也是旧版本 eclipse 的特殊功能。

编辑:这是我的示例代码。它主要基于 mongodb 的教程点的示例,但很可能与 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 重命名为 myDb

private static MongoDatabase db;

以前我用过eclipse Helios,从来没有遇到过这种“功能”。

Edit2:我已经找到了 fatal error 。在方法“main4”中,后面缺少分号

updateDocument.put("likes", "200")

仍然不明白为什么这会让 Eclipse 如此不安,以至于它拒绝重构,而且我仍然想知道是否有一种方法可以在出现错误的情况下强制重构。

最佳答案

编译器会发出两种错误:语法错误和所有其他类型的错误,例如“类型不匹配”和“找不到符号”。 Eclipse 提示语法错误。您确定在以前的情况下,当 Eclipse 同意重构您的代码(尽管它包含错误)时,您的代码包含的是语法错误吗?您看,存在很大差异。

在 java 中重构符号名称比简单的文本搜索和替换要复杂得多,必须考虑代码的结构。

但是在语法错误的情况下,编译器已经放弃解析您的文件,因此它不知道代码的结构:它不知道哪些标记是变量,哪些标记是类型,哪些标记是方法等等,所以它确实无法进行您想要的重构。

因此,如果您确实必须在存在语法错误的情况下继续进行重构,那么在这种特殊情况下,恐怕文本搜索和替换是您的最佳选择。

但是在尝试重构之前修复语法错误将是最谨慎的做法。

关于java - 如何在 eclipse mars 中强制重命名变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33855752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com