-
Notifications
You must be signed in to change notification settings - Fork 53
io microsphere reflect ReflectionUtils
Type: Class | Module: microsphere-java-core | Package: io.microsphere.reflect | Since: 1.0.0
Source:
microsphere-java-core/src/main/java/io/microsphere/reflect/ReflectionUtils.java
Reflection Utility class , generic methods are defined from FieldUtils , MethodUtils , ConstructorUtils
public abstract class ReflectionUtils implements UtilsAuthor: Mercy
-
Introduced in:
1.0.0 -
Current Project Version:
0.1.10-SNAPSHOT
This component is tested and compatible with the following Java versions:
| Java Version | Status |
|---|---|
| Java 8 | ✅ Compatible |
| Java 11 | ✅ Compatible |
| Java 17 | ✅ Compatible |
| Java 21 | ✅ Compatible |
| Java 25 | ✅ Compatible |
if (ReflectionUtils.isSupportedSunReflectReflection()) {
System.out.println("sun.reflect.Reflection is supported.");
} else {
System.out.println("sun.reflect.Reflection is NOT supported.");
}public class Example {
public void exampleMethod() {
String callerClassName = ReflectionUtils.getCallerClassName();
System.out.println("Caller class: " + callerClassName);
}
}public class Example {
public void testMethod() {
Class<?> callerClass = ReflectionUtils.getCallerClass();
System.out.println("Caller class: " + callerClass.getName());
}
}String[] stringArray = {"apple", "banana", "cherry"};
List<String> stringList = ReflectionUtils.toList(stringArray);
System.out.println(stringList); // Output: [apple, banana, cherry]
Integer[][] nestedArray = {{1, 2}, {3, 4}};
List<List<Integer>> nestedList = ReflectionUtils.toList(nestedArray);
System.out.println(nestedList); // Output: [[1, 2], [3, 4]]class Person {
private String name;
private int age;
private Address address; // Assume Address is another POJO class
// constructor, getters, setters...
}
class Address {
private String city;
private String street;
// constructor, getters, setters...
}
Person person = new Person("John", 30, new Address("New York", "5th Avenue"));
Map<String, Object> result = ReflectionUtils.readFieldsAsMap(person);
// Sample output:
// {
// "name": "John",
// "age": 30,
// "address": {
// "city": "New York",
// "street": "5th Avenue"
// }
// }try {
Field field = MyClass.class.getDeclaredField("myField");
field.setAccessible(true); // This might throw InaccessibleObjectException
} catch (Throwable t) {
if (ReflectionUtils.isInaccessibleObjectException(t)) {
System.err.println("Caught InaccessibleObjectException: " + t.getMessage());
} else {
throw new RuntimeException("Unexpected error", t);
}
}Class<?> exceptionClass = SomeException.class;
if (ReflectionUtils.isInaccessibleObjectException(exceptionClass)) {
System.err.println("The class represents InaccessibleObjectException");
} else {
System.out.println("The class does not represent InaccessibleObjectException");
}Add the following dependency to your pom.xml:
<dependency>
<groupId>io.github.microsphere-projects</groupId>
<artifactId>microsphere-java-core</artifactId>
<version>${microsphere-java.version}</version>
</dependency>Tip: Use the BOM (
microsphere-java-dependencies) for consistent version management. See the Getting Started guide.
import io.microsphere.reflect.ReflectionUtils;| Method | Description |
|---|---|
isSupportedSunReflectReflection |
Current Type |
getCallerClassName |
Retrieves the fully qualified name of the class that called the method invoking this method. |
getCallerClass |
Gets the Class of the method caller. |
toList |
Get caller class In SUN HotSpot JVM |
isInaccessibleObjectException |
Reads all non-static fields of the given object and returns them as a map. |
isInaccessibleObjectException |
Checks whether the specified Class represents |
public static boolean isSupportedSunReflectReflection()Current Type / private static final Class TYPE = ReflectionUtils.class;
private static final Logger logger = getLogger(TYPE);
/** Sun JDK implementation class: full name of sun.reflect.Reflection / public static final String SUN_REFLECT_REFLECTION_CLASS_NAME = "sun.reflect.Reflection";
/**
The Class of sun.reflect.Reflection
/
public static String getCallerClassName()Retrieves the fully qualified name of the class that called the method invoking this method.
This method attempts to use the internal Sun JDK class
sun.reflect.Reflection for high-performance caller class detection if
available. If not supported (e.g., non-Sun/HotSpot JVM), it falls back to using
the StackTraceElement approach.
`public class Example {
public void exampleMethod() {
String callerClassName = ReflectionUtils.getCallerClassName();
System.out.println("Caller class: " + callerClassName);
`
}
}
On Sun/HotSpot JVMs, this method is highly efficient as it leverages internal JVM mechanisms. On other JVMs, a stack trace-based approach is used, which may be less performant but ensures compatibility.
public static Class<?> getCallerClass()Gets the Class of the method caller.
This method attempts to retrieve the calling class using the
sun.reflect.Reflection class if supported by the current JVM.
If not supported (e.g., non-Sun/HotSpot JVM), it falls back to using
the StackTraceElement approach.
`public class Example {
public void testMethod() {
Class callerClass = ReflectionUtils.getCallerClass();
System.out.println("Caller class: " + callerClass.getName());
`
}
}
public static boolean isInaccessibleObjectException(Throwable failure)Reads all non-static fields of the given object and returns them as a map.
This method recursively processes nested objects, converting them into maps as well, provided they are not primitive or simple types (e.g., String, Number).
`class Person {
private String name;
private int age;
private Address address; // Assume Address is another POJO class
// constructor, getters, setters...
`
class Address {
private String city;
private String street;
// constructor, getters, setters...
}
Person person = new Person("John", 30, new Address("New York", "5th Avenue"));
Map result = ReflectionUtils.readFieldsAsMap(person);
// Sample output:
// {
// "name": "John",
// "age": 30,
// "address": {
// "city": "New York",
// "street": "5th Avenue"
// }
// }
}
public static boolean isInaccessibleObjectException(Class<?> throwableClass)Checks whether the specified Class represents
java.lang.reflect.InaccessibleObjectException.
This method is useful when dealing with reflection operations that may fail due to module system restrictions introduced in JDK 9+. It avoids direct dependency on the presence of the class, which may not be available in earlier JDK versions.
`Class exceptionClass = SomeException.class;
if (ReflectionUtils.isInaccessibleObjectException(exceptionClass)) {
System.err.println("The class represents InaccessibleObjectException");
` else {
System.out.println("The class does not represent InaccessibleObjectException");
}
}
MethodFieldConstructorArrayMethodUtilsFieldUtilsConstructorUtils
This documentation was auto-generated from the source code of microsphere-java.
java-annotations
java-core
- ACLLoggerFactory
- AbstractArtifactResourceResolver
- AbstractConverter
- AbstractDeque
- AbstractEventDispatcher
- AbstractLogger
- AbstractURLClassPathHandle
- AccessibleObjectUtils
- AdditionalMetadataResourceConfigurationPropertyLoader
- AnnotationUtils
- ArchiveFileArtifactResourceResolver
- ArrayEnumeration
- ArrayStack
- ArrayUtils
- Artifact
- ArtifactDetector
- ArtifactResourceResolver
- Assert
- BannedArtifactClassLoadingExecutor
- BaseUtils
- BeanMetadata
- BeanProperty
- BeanUtils
- ByteArrayToObjectConverter
- CharSequenceComparator
- CharSequenceUtils
- CharsetUtils
- ClassDataRepository
- ClassDefinition
- ClassFileJarEntryFilter
- ClassFilter
- ClassLoaderUtils
- ClassPathResourceConfigurationPropertyLoader
- ClassPathUtils
- ClassUtils
- ClassicProcessIdResolver
- ClassicURLClassPathHandle
- CollectionUtils
- Compatible
- CompositeSubProtocolURLConnectionFactory
- CompositeURLStreamHandlerFactory
- ConditionalEventListener
- ConfigurationProperty
- ConfigurationPropertyGenerator
- ConfigurationPropertyLoader
- ConfigurationPropertyReader
- Configurer
- ConsoleURLConnection
- Constants
- ConstructorDefinition
- ConstructorUtils
- Converter
- Converters
- CustomizedThreadFactory
- DefaultConfigurationPropertyGenerator
- DefaultConfigurationPropertyReader
- DefaultDeserializer
- DefaultEntry
- DefaultSerializer
- DelegatingBlockingQueue
- DelegatingDeque
- DelegatingIterator
- DelegatingQueue
- DelegatingScheduledExecutorService
- DelegatingURLConnection
- DelegatingURLStreamHandlerFactory
- DelegatingWrapper
- Deprecation
- Deserializer
- Deserializers
- DirectEventDispatcher
- DirectoryFileFilter
- EmptyDeque
- EmptyIterable
- EmptyIterator
- EnumerationIteratorAdapter
- EnumerationUtils
- Event
- EventDispatcher
- EventListener
- ExceptionUtils
- ExecutableDefinition
- ExecutableUtils
- ExecutorUtils
- ExtendableProtocolURLStreamHandler
- FastByteArrayInputStream
- FastByteArrayOutputStream
- FieldDefinition
- FieldUtils
- FileChangedEvent
- FileChangedListener
- FileConstants
- FileExtensionFilter
- FileUtils
- FileWatchService
- Filter
- FilterOperator
- FilterUtils
- FormatUtils
- Functional
- GenericEvent
- GenericEventListener
- Handler
- Handler
- HierarchicalClassComparator
- IOFileFilter
- IOUtils
- ImmutableEntry
- IterableAdapter
- IterableUtils
- Iterators
- JDKLoggerFactory
- JSON
- JSONArray
- JSONException
- JSONObject
- JSONStringer
- JSONTokener
- JSONUtils
- JarEntryFilter
- JarUtils
- JavaType
- JmxUtils
- ListUtils
- Listenable
- Lists
- Logger
- LoggerFactory
- LoggingFileChangedListener
- MBeanAttribute
- MBeanAttributeInfoBuilder
- MBeanConstructorInfoBuilder
- MBeanDescribableBuilder
- MBeanExecutableInfoBuilder
- MBeanFeatureInfoBuilder
- MBeanInfoBuilder
- MBeanNotificationInfoBuilder
- MBeanOperationInfoBuilder
- MBeanParameterInfoBuilder
- ManagementUtils
- ManifestArtifactResourceResolver
- MapToPropertiesConverter
- MapUtils
- Maps
- MavenArtifact
- MavenArtifactResourceResolver
- MemberDefinition
- MemberUtils
- MetadataResourceConfigurationPropertyLoader
- MethodDefinition
- MethodHandleUtils
- MethodHandlesLookupUtils
- MethodUtils
- ModernProcessIdResolver
- ModernURLClassPathHandle
- Modifier
- MultiValueConverter
- MultipleType
- MutableInteger
- MutableURLStreamHandlerFactory
- NameFileFilter
- NoOpLogger
- NoOpLoggerFactory
- NoOpURLClassPathHandle
- NumberToByteConverter
- NumberToCharacterConverter
- NumberToDoubleConverter
- NumberToFloatConverter
- NumberToIntegerConverter
- NumberToLongConverter
- NumberToShortConverter
- NumberUtils
- ObjectToBooleanConverter
- ObjectToByteArrayConverter
- ObjectToByteConverter
- ObjectToCharacterConverter
- ObjectToDoubleConverter
- ObjectToFloatConverter
- ObjectToIntegerConverter
- ObjectToLongConverter
- ObjectToOptionalConverter
- ObjectToShortConverter
- ObjectToStringConverter
- PackageNameClassFilter
- PackageNameClassNameFilter
- ParallelEventDispatcher
- ParameterizedTypeImpl
- PathConstants
- Predicates
- Prioritized
- PriorityComparator
- ProcessExecutor
- ProcessIdResolver
- ProcessManager
- PropertiesToStringConverter
- PropertiesUtils
- PropertyConstants
- PropertyResourceBundleControl
- PropertyResourceBundleUtils
- ProtocolConstants
- ProxyUtils
- QueueUtils
- ReadOnlyIterator
- ReflectionUtils
- ReflectiveConfigurationPropertyGenerator
- ReflectiveDefinition
- ResourceConstants
- ReversedDeque
- Scanner
- SecurityUtils
- SeparatorConstants
- Serializer
- Serializers
- ServiceLoaderURLStreamHandlerFactory
- ServiceLoaderUtils
- ServiceLoadingURLClassPathHandle
- SetUtils
- Sets
- Sfl4jLoggerFactory
- ShutdownHookCallbacksThread
- ShutdownHookUtils
- SimpleClassScanner
- SimpleFileScanner
- SimpleJarEntryScanner
- SingletonDeque
- SingletonEnumeration
- SingletonIterator
- StackTraceUtils
- StandardFileWatchService
- StandardURLStreamHandlerFactory
- StopWatch
- StreamArtifactResourceResolver
- Streams
- StringBuilderWriter
- StringConverter
- StringDeserializer
- StringSerializer
- StringToArrayConverter
- StringToBlockingDequeConverter
- StringToBlockingQueueConverter
- StringToBooleanConverter
- StringToByteConverter
- StringToCharArrayConverter
- StringToCharacterConverter
- StringToClassConverter
- StringToCollectionConverter
- StringToDequeConverter
- StringToDoubleConverter
- StringToDurationConverter
- StringToFloatConverter
- StringToInputStreamConverter
- StringToIntegerConverter
- StringToIterableConverter
- StringToListConverter
- StringToLongConverter
- StringToMultiValueConverter
- StringToNavigableSetConverter
- StringToQueueConverter
- StringToSetConverter
- StringToShortConverter
- StringToSortedSetConverter
- StringToStringConverter
- StringToTransferQueueConverter
- StringUtils
- SubProtocolURLConnectionFactory
- SymbolConstants
- SystemUtils
- ThrowableAction
- ThrowableBiConsumer
- ThrowableBiFunction
- ThrowableConsumer
- ThrowableFunction
- ThrowableSupplier
- ThrowableUtils
- TrueClassFilter
- TrueFileFilter
- TypeArgument
- TypeFinder
- TypeUtils
- URLClassPathHandle
- URLUtils
- UnmodifiableDeque
- UnmodifiableIterator
- UnmodifiableQueue
- Utils
- ValueHolder
- Version
- VersionUtils
- VirtualMachineProcessIdResolver
- Wrapper
- WrapperProcessor
jdk-tools
lang-model
- AnnotatedElementJSONElementVisitor
- AnnotationUtils
- ClassUtils
- ConstructorUtils
- ElementUtils
- ExecutableElementComparator
- FieldUtils
- JSONAnnotationValueVisitor
- JSONElementVisitor
- LoggerUtils
- MemberUtils
- MessagerUtils
- MethodUtils
- ResolvableAnnotationValueVisitor
- StringAnnotationValue
- TypeUtils
annotation-processor
- ConfigurationPropertyAnnotationProcessor
- ConfigurationPropertyJSONElementVisitor
- FilerProcessor
- ResourceProcessor
java-test
- AbstractAnnotationProcessingTest
- Ancestor
- AnnotationProcessingTestProcessor
- ArrayTypeModel
- CollectionTypeModel
- Color
- CompilerInvocationInterceptor
- ConfigurationPropertyModel
- DefaultTestService
- GenericTestService
- MapTypeModel
- Model
- Parent
- PrimitiveTypeModel
- SimpleTypeModel
- StringArrayList
- TestAnnotation
- TestService
- TestServiceImpl