在java反射中如何将c.newInstance()转为具体的类 而不是object?

问题描述

在java反射中如何将c.newInstance()转为具体的类 而不是object?

package test.action;

import test.entity.City;

public class Test {
public static void main(String[] args) {
City c=new City("111","江苏","22");
show(City.class);
}
public static void show(Class c1){
try {
Class c =Class.forName(c1.getName());
c.getConstructors();
try {
City o=(City) c.newInstance();
//这里如果不采用上述强转,该怎么得到City对象呢?

        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

解决方案

你要是直接用City类的话就可以不需要强转的,而如果是单纯用Class实例化的话则必须要强转

 City city = City.class.newInstance();

解决方案二:

还有一种方法,也是不需要强转的:

 package test.action;
import test.entity.City;
public class Test {
public static void main(String[] args) {
City c=new City("111","江苏","22");
show(City.class);
}
public static void show(Class c1){
try {
Class tempClass = Class.forName(c1.getName()); //添加tempClass临时变量之后就不需要强转了
Class<City> c = tempClass;  // 通过泛型的类型参数
c.getConstructors();
try {
City o= c.newInstance();    // 不需要强转
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

解决方案三:

public static void show(Class<City> c1){ //加入泛型
//Class c =Class.forName(c1.getName());  //这行应该可以去掉直接用c1
//c1.getConstructors();
    try {
        City o=c1.newInstance();
    }catch (Exception e) {
        e.printStackTrace();
    }
}

但加了泛型这参数就没多大意义,不如直接写成这样


public static void show(){ //加入泛型
    try {
        City o=City.class.newInstance();
    }catch (Exception e) {
        e.printStackTrace();
    }
}
时间: 2024-11-02 02:57:30

在java反射中如何将c.newInstance()转为具体的类 而不是object?的相关文章

java反射机制学习总结

转自:http://blog.csdn.net/DBACQUAN/article/details/12124713     在学习过java反射后,对java反射还不是很了解,现在想用自己的语言来总结一下java的反射机制.     第一: java反射获得Class对象,即获得一面镜子,有三种方法:     (1)在java反射中最常用的方法是:Class cls = Class.forName("包名.类名");     (2)使用对象获得Class对象:Class cls = 对

Java反射机制的学习

Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调用其方法或修改其域(甚至是本身声明为private的域或方法). 也许你使用Java已经很长时间了,可是几乎不会用到Java反射机制.你会嗤之以鼻地告诉我,Java反射机制没啥用.或许在J2EE.J2SE等平台,Java反射机制没啥用(具体我也不了解,不多做评论),但是在Android应用开发中,该

Java反射

1. 了解 Java 中的反射 1.1 什么是 Java 的反射 Java 反射是可以让我们在运行时获取类的函数.属性.父类.接口等 Class 内部信息的机制.通过反射还可以让我们在运行期实例化对象,调用方法,通过调用 get/set 方法获取变量的值,即使方法或属性是私有的的也可以通过反射的形式调用,这种"看透 class"的能力被称为内省,这种能力在框架开发中尤为重要. 有些情况下,我们要使用的类在运行时才会确定,这个时候我们不能在编译期就使用它,因此只能通过反射的形式来使用在运

公共技术点之 Java 反射 Reflection

转发自  :http://a.codekk.com/detail/Android/Mr.Simple/%E5%85%AC%E5%85%B1%E6%8A%80%E6%9C%AF%E7%82%B9%E4%B9%8B%20Java%20%E5%8F%8D%E5%B0%84%20Reflection 本文为 Android 开源项目源码解析 公共技术点中的 Java 反射 部分 分析者:Mr.Simple,校对者:Trinea,校对状态:未完成 1. 了解 Java 中的反射 1.1 什么是 Java

Java反射探索研究(转)

         林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankakay           摘要:本文详细深入讲解是Java中反射的机制,并介绍了如何通过反射来生成对象.调用函数.取得字段.设置字段的方法.最后,给出了一些反射常用到的实例. 一.反射 (1)概念 反射含义:可以获取正在运行的Java对象.(2)功能        1)在运行时判断任意一个对象所属的类        2)在运行时构造任意一个类的对象        3) 在运行时

浅谈Java反射与代理_java

Java反射机制与动态代理,使得Java更加强大,Spring核心概念IoC.AOP就是通过反射机制与动态代理实现的. 1 Java反射 示例: User user = new User(); user.setTime5Flag("test"); Class<?> cls = Class.forName("com.test.User"); //接口必须public,无论是否在本类内部使用!或者使用cls.getDeclaredMethod(),或者遍历修

java 反射机制

今天和同事一起开发一个Android App的时候,第一次接触到了反射机制这样一个东西,于是上网查了很多资料,看了一些文档.现在终于有了一点了解,故将其写下,大牛勿喷.   首先,我们所学的编程语言大致可以分为两种,第一种为静态语言:C.C++.java ,这些语言的的变量类型一旦确定将不可更改:还有一类为动态语言:Perl.Python  这些语言的变量类型是可以更改的.但是java又区别于一般的静态语言,因为其具有动态机制,所以java可以加载一个在运行时才确定的Class,得知其完整的构造

java-Java开发中会在什么情况下创建实体类

问题描述 Java开发中会在什么情况下创建实体类 在Java学习中,大多只提到如何创建实体类,而没有说明在什么情况下要创建实体类. 如果,我读取一个表就要创建一个实体类,过程是不是会有些繁琐了. 解决方案 创建实体类.能花多长时间, 你可以用一些工具.插件,反向生成java类,hibernate有,mybatis也有.很方便的. 解决方案二: 不会很繁琐,就是看你用的什么框架,根据框架的要求创建实体类,一般来说就是写一个class类,没有什么繁琐的 解决方案三: Java有自己的垃圾回收机制,可

实例讲解Java编程中数组反射的使用方法_java

什么是反射"反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为."这个概念常常会和内省(Introspection)混淆,以下是这两个术语在Wikipedia中的解释: 内省用于在运行时检测某个对象的类型和其包含的属性: 反射用于在运行时检测和修改某个对象的结构及其行为. 从它们的定义可以看出,内省是反射的一个子集.有些语言支持内省,但并不支持反射,如C++. 内省示例:instanceof 运算符用于检测某个对象是否属于特定的类. if (obj insta