private static void TryDispose(this IJavaObject javaObject) { if (!javaObject.IsAlive()) { return; } var hasDefaultConstructor = ObjectToDefaultJavaConstructor .GetOrAdd(javaObject.GetType(), type => { var constructor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, DefaultJavaConstructorArgs, null); if (constructor == null) { if (Tracer.TraceWarning) { Tracer.Warn($"The type {type} cannot be disposed"); } return(false); } return(true); }); if (hasDefaultConstructor) { javaObject.Dispose(); } }