Как я могу заставить eclipse mars переименовывать имена переменных? Когда я пытаюсь, я получаю
Этот рефакторинг невозможно выполнить корректно из-за синтаксических ошибок в модуле компиляции.
Диалог предлагает только "Отмена".
Это можно было сделать в более старых версиях eclipse, и я широко использовал эту функцию, например, после копирования и вставки фрагментов кода, найденных в сети.
Обратите внимание, что это не дубликат Рефакторинг имен переменных в Eclipse .
Редактировать 3 (резюме того, что произошло):
В коде (показанном ниже) были не только такие распространенные ошибки, как отсутствующий импорт или необъявленные переменные, но и отсутствующий ";", то есть настоящая синтаксическая ошибка. Это, сначала скрытое среди нескольких других проблем компиляции, заставило eclipse отказаться от рефакторинга.
Как оказалось, это особенность не марса, а более старых версий затмения.
Изменить: вот мой пример кода. В основном он основан на примерах из tutorialspoint для 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: я обнаружил фатальную ошибку. В методе "main4" отсутствует точка с запятой после
updateDocument.put("likes", "200")
До сих пор не понимаю, почему это так расстраивает eclipse, что он отказывается от рефакторинга, и мне все же хотелось бы знать, есть ли способ принудительно провести рефакторинг, несмотря на ошибки.