Java getinstance(java如何实现输入)

1.背景实际中经常使用getInstance()方法返回一个对象,对于工厂模式,传入对应的参数返回与之相对应的对象.但是,问题来了,返回的对象需要被强制转换,很麻烦.importjava.lang.reflect.*;publicclasstest{publicstaticvoidmain(String[]args){test1t1=factory.getInstance(“…

大家好,又见面了,我是你们的朋友全栈君。

1.背景

实际中经常使用getInstance()方法返回一个对象,对于工厂模式,传入对应的参数返回与之相对应的对象.但是,问题来了,返回的对象需要被强制转换,很麻烦.

import java.lang.reflect.*;

public class test

{

public static void main(String[] args) {

test1 t1 = factory.getInstance(“test1”);

test2 t2 = factory.getInstance(“test2”);

}

}

class factory

{

public static Object getInstance(String className)

{

try

{

return Class.forName(className).getConstructor().newInstance();

}

catch(Exception e)

{

e.printStackTrace();

}

return null;

}

}

class test1

{

public test1()

{

}

}

class test2

{

public test2()

{

}

}

编译不通过,说类型不兼容.

8669fbc786f87eeab302b037c309966a.png

因此加上强制类型转换,编译通过了.

test1 t1 = (test1)factory.getInstance(“test1”);

test2 t2 = (test2)factory.getInstance(“test2”);

2.如何处理

例子只有两个类,手动强制转换还可以,但如果多个类咋办啊?而且作者是那种非常懒的人,也不想手动去转换,因此,用大招—–泛型!

3.使用泛型

使用Class 泛型可以避免强制转换从而更有效地偷懒 ,需要把返回类型改成 T,同时由于使用了T,必须修改传进来的参数.

public static T getInstance(Class t)

4.完整代码

import java.lang.reflect.*;

public class test

{

public static void main(String[] args) {

test1 t1 = factory.getInstance(test1.class);

test2 t2 = factory.getInstance(test2.class);

}

}

class factory

{

public static T getInstance(Class t)

{

try

{

return t.getConstructor().newInstance();

}

catch(Exception e)

{

e.printStackTrace();

}

return null;

}

}

class test1

{

public test1()

{

}

}

class test2

{

public test2()

{

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/129707.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • maven打包常用命令总结

    maven打包常用命令总结maven打包常用命令总结基本命令介绍1、mvnclean2、mvncompile3、mvnpackage4、mvninstall5、mvndeploy生产环境打包举例1、生产环境根据源码构建项目:2、可用用到的其他mvn参数介绍:开发过程中常见以下几个命令,这些命令执行后程序究竟发生了什么变化?生产环境如果使用shell脚本配置jenkins构建项目,如何使用命令呢?下面介绍一下我常…

  • 牛顿法和梯度下降法_最优化次梯度法例题

    牛顿法和梯度下降法_最优化次梯度法例题我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题“在一定成本下,如何使利润最大化”等。最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素

  • 关于vueThink框架打包发布的一些问题

    关于vueThink框架打包发布的一些问题

    2021年10月11日
  • pytest重试_pytest失败重跑

    pytest重试_pytest失败重跑安装:pip3installpytest-rerunfailures重新运行所有失败用例要重新运行所有测试失败的用例,请使用–reruns命令行选项,并指定要运行测试的最大次数:$py

  • Centos Go环境搭建「建议收藏」

    Centos Go环境搭建「建议收藏」标准官网:https://golang.org/需要墙镜像官网:https://golang.google.cn/dl/【国内推荐】1、下载文件wgethttps://golang.google.cn/dl/go1.14.7.linux-amd64.tar.gz2、解压文件到/usr/local如果之前已经安装过go的版本,先清空下go下面src,不然可能会报一些previousdeclarationat/usr/local/go/src/runtime/internal/atom

    2022年10月12日
  • 增量表全量表拉链表区别_hive 增量数据更新

    增量表全量表拉链表区别_hive 增量数据更新一、概念增量表:记录更新周期内新增的数据,即在原表中数据的基础上新增本周期内产生的新数据;全量表:记录更新周期内的全量数据,无论数据是否有变化都需要记录;拉链表:一种数据存储和处理的技术方式,可以记录数据的历史信息,记录数据从开始一直到当前所有变化的信息。二、举例详解增量表:以页面访问数据表为例,假设该表从2020-06-01开始记录数据,按天更新,分区为dt。2020-06-01产生了三条访问数据,如下表:2020-06-02首页和商详页又产生了2条访问数据,该两条即为2020-06-

    2022年10月17日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号