diff --git a/sdk/android/src/jni/jni_helpers.cc b/sdk/android/src/jni/jni_helpers.cc
index 6331a64..201520c 100644
--- a/sdk/android/src/jni/jni_helpers.cc
+++ b/sdk/android/src/jni/jni_helpers.cc
@@ -311,16 +311,13 @@
                            state_class, index);
 }
 
-std::string GetJavaEnumName(JNIEnv* jni,
-                            const std::string& className,
-                            jobject j_enum) {
-  jclass enumClass = FindClass(jni, className.c_str());
+std::string GetJavaEnumName(JNIEnv* jni, jobject j_enum) {
+  jclass enum_class = GetClass(jni, "java/lang/Enum");
   jmethodID nameMethod =
-      GetMethodID(jni, enumClass, "name", "()Ljava/lang/String;");
+      GetMethodID(jni, enum_class, "name", "()Ljava/lang/String;");
   jstring name =
       reinterpret_cast<jstring>(jni->CallObjectMethod(j_enum, nameMethod));
-  CHECK_EXCEPTION(jni) << "error during CallObjectMethod for " << className
-                       << ".name";
+  CHECK_EXCEPTION(jni);
   return JavaToStdString(jni, name);
 }
 
diff --git a/sdk/android/src/jni/jni_helpers.h b/sdk/android/src/jni/jni_helpers.h
index e08e4b2..e18edc2 100644
--- a/sdk/android/src/jni/jni_helpers.h
+++ b/sdk/android/src/jni/jni_helpers.h
@@ -130,9 +130,7 @@
                                                        jobject j_map);
 
 // Returns the name of a Java enum.
-std::string GetJavaEnumName(JNIEnv* jni,
-                            const std::string& className,
-                            jobject j_enum);
+std::string GetJavaEnumName(JNIEnv* jni, jobject j_enum);
 
 jobject NewGlobalRef(JNIEnv* jni, jobject o);
 
diff --git a/sdk/android/src/jni/pc/androidnetworkmonitor_jni.cc b/sdk/android/src/jni/pc/androidnetworkmonitor_jni.cc
index 6494e72..ff1f4f6 100644
--- a/sdk/android/src/jni/pc/androidnetworkmonitor_jni.cc
+++ b/sdk/android/src/jni/pc/androidnetworkmonitor_jni.cc
@@ -31,9 +31,7 @@
 int AndroidNetworkMonitor::android_sdk_int_ = 0;
 
 static NetworkType GetNetworkTypeFromJava(JNIEnv* jni, jobject j_network_type) {
-  std::string enum_name =
-      GetJavaEnumName(jni, "org/webrtc/NetworkMonitorAutoDetect$ConnectionType",
-                      j_network_type);
+  std::string enum_name = GetJavaEnumName(jni, j_network_type);
   if (enum_name == "CONNECTION_UNKNOWN") {
     return NetworkType::NETWORK_UNKNOWN;
   }
diff --git a/sdk/android/src/jni/pc/java_native_conversion.cc b/sdk/android/src/jni/pc/java_native_conversion.cc
index 1eadfa3..31668e9 100644
--- a/sdk/android/src/jni/pc/java_native_conversion.cc
+++ b/sdk/android/src/jni/pc/java_native_conversion.cc
@@ -208,9 +208,7 @@
 PeerConnectionInterface::IceTransportsType JavaToNativeIceTransportsType(
     JNIEnv* jni,
     jobject j_ice_transports_type) {
-  std::string enum_name =
-      GetJavaEnumName(jni, "org/webrtc/PeerConnection$IceTransportsType",
-                      j_ice_transports_type);
+  std::string enum_name = GetJavaEnumName(jni, j_ice_transports_type);
 
   if (enum_name == "ALL")
     return PeerConnectionInterface::kAll;
@@ -231,8 +229,7 @@
 PeerConnectionInterface::BundlePolicy JavaToNativeBundlePolicy(
     JNIEnv* jni,
     jobject j_bundle_policy) {
-  std::string enum_name = GetJavaEnumName(
-      jni, "org/webrtc/PeerConnection$BundlePolicy", j_bundle_policy);
+  std::string enum_name = GetJavaEnumName(jni, j_bundle_policy);
 
   if (enum_name == "BALANCED")
     return PeerConnectionInterface::kBundlePolicyBalanced;
@@ -250,8 +247,7 @@
 PeerConnectionInterface::RtcpMuxPolicy JavaToNativeRtcpMuxPolicy(
     JNIEnv* jni,
     jobject j_rtcp_mux_policy) {
-  std::string enum_name = GetJavaEnumName(
-      jni, "org/webrtc/PeerConnection$RtcpMuxPolicy", j_rtcp_mux_policy);
+  std::string enum_name = GetJavaEnumName(jni, j_rtcp_mux_policy);
 
   if (enum_name == "NEGOTIATE")
     return PeerConnectionInterface::kRtcpMuxPolicyNegotiate;
@@ -266,9 +262,7 @@
 PeerConnectionInterface::TcpCandidatePolicy JavaToNativeTcpCandidatePolicy(
     JNIEnv* jni,
     jobject j_tcp_candidate_policy) {
-  std::string enum_name =
-      GetJavaEnumName(jni, "org/webrtc/PeerConnection$TcpCandidatePolicy",
-                      j_tcp_candidate_policy);
+  std::string enum_name = GetJavaEnumName(jni, j_tcp_candidate_policy);
 
   if (enum_name == "ENABLED")
     return PeerConnectionInterface::kTcpCandidatePolicyEnabled;
@@ -283,9 +277,7 @@
 PeerConnectionInterface::CandidateNetworkPolicy
 JavaToNativeCandidateNetworkPolicy(JNIEnv* jni,
                                    jobject j_candidate_network_policy) {
-  std::string enum_name =
-      GetJavaEnumName(jni, "org/webrtc/PeerConnection$CandidateNetworkPolicy",
-                      j_candidate_network_policy);
+  std::string enum_name = GetJavaEnumName(jni, j_candidate_network_policy);
 
   if (enum_name == "ALL")
     return PeerConnectionInterface::kCandidateNetworkPolicyAll;
@@ -299,8 +291,7 @@
 }
 
 rtc::KeyType JavaToNativeKeyType(JNIEnv* jni, jobject j_key_type) {
-  std::string enum_name =
-      GetJavaEnumName(jni, "org/webrtc/PeerConnection$KeyType", j_key_type);
+  std::string enum_name = GetJavaEnumName(jni, j_key_type);
 
   if (enum_name == "RSA")
     return rtc::KT_RSA;
@@ -313,9 +304,7 @@
 
 PeerConnectionInterface::ContinualGatheringPolicy
 JavaToNativeContinualGatheringPolicy(JNIEnv* jni, jobject j_gathering_policy) {
-  std::string enum_name =
-      GetJavaEnumName(jni, "org/webrtc/PeerConnection$ContinualGatheringPolicy",
-                      j_gathering_policy);
+  std::string enum_name = GetJavaEnumName(jni, j_gathering_policy);
   if (enum_name == "GATHER_ONCE")
     return PeerConnectionInterface::GATHER_ONCE;
 
@@ -330,9 +319,7 @@
 PeerConnectionInterface::TlsCertPolicy JavaToNativeTlsCertPolicy(
     JNIEnv* jni,
     jobject j_ice_server_tls_cert_policy) {
-  std::string enum_name =
-      GetJavaEnumName(jni, "org/webrtc/PeerConnection$TlsCertPolicy",
-                      j_ice_server_tls_cert_policy);
+  std::string enum_name = GetJavaEnumName(jni, j_ice_server_tls_cert_policy);
 
   if (enum_name == "TLS_CERT_POLICY_SECURE")
     return PeerConnectionInterface::kTlsCertPolicySecure;
