Ich arbeite mit einem Legacy-Code, wo ich sehe bestimmte DB-Transaktion in Try-with-Resources geschlossen Block initiiert. Ich verstehe, dass die DB-Ressource geschlossen wird, sobald der Code im try-Block ausgeführt wird. Kann mir jemand helfen, wie kann ich das autoclosing überfahren oder umgehen? In diesem Fall? Ich arbeite mit dem Legacy-Code und das auch für sehr kurze Zeit, möchte also nicht zu viel Code ändern und Unit-Test-Fehler einleiten.Try-with-Ressource autoclose Probleme
Antwort
Leider können Sie sich nicht hacken, indem Sie die try-with-resources-Kennung null
oder eine ähnliche Technik zuweisen: Java lässt Sie das nicht tun.
Das ist eine gute Sache, da es Ihren Quellcode verschmutzen würde, was die Umkehrung der vorübergehenden Änderung schwierig macht.
Glücklicherweise gibt es bessere Möglichkeiten: Wenn Sie in der Lage sind, die Ressourcenklasse leicht zu ändern, könnten Sie immer eine disableClose()
-Methode erstellen, die ein Flag setzt, so dass der nachfolgende close()
-Aufruf gutartig ist. Wenn Sie die Ressourcenklasse nicht ändern können, leiten Sie eine Klasse daraus ab und erstellen Sie stattdessen eine Instanz davon. Obwohl dies möglicherweise einen Codebausteinkonstruktorcode erforderlich macht, könnte dies ein besserer Ansatz sein, da Sie dann etwas erstellen können, das die Instanzen protokolliert, die nicht ordnungsgemäß geschlossen wurden.
Wenn Sie eine der beiden Methoden anwenden, können Sie diese vorübergehende Änderung ganz einfach entfernen, indem Sie die disableClose()
-Methode oder die abgeleitete Klasse entfernen, was Kompilierungsfehler zur Folge hat, die Sie nacheinander beheben können.
Mögliche Implementierung der abgeleiteten Klasse Ansatz:
public class Foo extends YourResource
{
// ToDo - add constructors here.
private boolean disable = false;
@Override
public void close()
{
// ToDo - consider maintaining a collection of unclosed instances.
if (!disable){
super.close();
}
}
public void disableClose()
{
disable = true;
}
}
- 1. autoclose DatePickerDialog
- 2. Autoclose alert
- 3. Verwendung mit Autoclose in Kotlin
- 4. Autoclose Vim-Plugin - deaktivieren "{{" → "{\ n \ n}" -Funktionalität
- 5. Ich möchte eine modale popup autoclose nach dem Senden Formular
- 6. Autoclose-Tags in Adobe Brackets können nicht deaktiviert werden
- 7. Disable Daten-autoclose Dropdown-Menü nur in einem Menü
- 8. Wie autoclose datetimepicker von Bootstrap mit dp.change Ereignis?
- 9. Intellij IDEA autoclose HTML-Tags, wie deaktiviere ich es?
- 10. ADO.NET Connection Pooling und Implikationen für die Autoclose = True
- 11. WP CSS Probleme/URL Probleme
- 12. Suchmaschinen-Probleme
- 13. ostream Probleme
- 14. UIScrollView Probleme
- 15. Geländekollision Probleme
- 16. SharedPreferences Probleme
- 17. Selen Probleme
- 18. Counter Probleme
- 19. NavigatorIOS Probleme
- 20. DropDownListFür Probleme
- 21. @Input() Probleme
- 22. CCLayerColor Probleme
- 23. schwebende Probleme
- 24. AllowEditRanges.Add Probleme
- 25. Twitterizer Probleme
- 26. MultiViewControl Probleme
- 27. % Zeilenhöhe Probleme
- 28. Flexbox Probleme
- 29. Typprüfung Probleme
- 30. Pythronthreading Probleme
So wollen Sie Fehler im Code einzuführen, indem nicht die Ressourcen zu schließen, die geschlossen werden müssen? Warum? –
Ohne irgendeinen Code und spezifischere Eingabe auf was genau Sie beabsichtigen zu tun/ändern ... können wir nicht helfen. – GhostCat