Java Tutorial/Reflection/Super Class
Содержание
Get all methods including the inherited method. Using the getMethods(), we can only access public methods.
import java.lang.reflect.Method;
class GetMethods {
public int add(int numberA, int numberB) {
return numberA + numberB;
}
protected int multiply(int numberA, int numberB) {
return numberA * numberB;
}
private double div(int numberA, int numberB) {
return numberA / numberB;
}
}
public class Main {
public static void main(String[] args) throws Exception {
GetMethods object = new GetMethods();
Class clazz = object.getClass();
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println("Method name = " + method.getName());
System.out.println("Method return type = " + method.getReturnType().getName());
Class[] paramTypes = method.getParameterTypes();
for (Class c : paramTypes) {
System.out.println("Param type = " + c.getName());
}
}
Method method = clazz.getMethod("add", new Class[] { int.class, int.class });
System.out.println("Method name: " + method.getName());
}
}
Get super class of an object
public class Main {
public static void main(String[] args) {
Object o = new String("Hello");
Class clazz = o.getClass().getSuperclass();
System.out.println("Super Class = " + clazz);
o = new StringIndexOutOfBoundsException("Error message");
clazz = o.getClass().getSuperclass();
System.out.println("Super Class = " + clazz);
}
}
Getting the Superclass of an Object
public class Main {
public static void main(String[] argv) throws Exception {
Object o = new String();
Class sup = o.getClass().getSuperclass(); // java.lang.Object
}
}
Is Inheritable
//
//$Id: IntrospectionUtil.java 1540 2007-01-19 12:24:10Z janb $
//Copyright 2006 Mort Bay Consulting Pty. Ltd.
//------------------------------------------------------------------------
//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//http://www.apache.org/licenses/LICENSE-2.0
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
//
import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
public class Utils {
public static boolean isInheritable(Package pack, Member member) {
if (pack == null)
return false;
if (member == null)
return false;
int modifiers = member.getModifiers();
if (Modifier.isPublic(modifiers))
return true;
if (Modifier.isProtected(modifiers))
return true;
if (!Modifier.isPrivate(modifiers) && pack.equals(member.getDeclaringClass().getPackage()))
return true;
return false;
}
}
Superclass of Object is null
public class Main {
public static void main(String[] argv) throws Exception {
Object o = new Object();
Class sup = o.getClass().getSuperclass(); // null
}
}
The superclass of primitive types is always null
public class Main {
public static void main(String[] argv) throws Exception {
Class cls = int.class;
Class sup = cls.getSuperclass(); // null
}
}