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()

{

}

}

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ios最新屏蔽更新描述文件(屏蔽ios14系统升级描述文件)

    崇尚专注乐于分享愿为您带来生活中的便利每晚8点期待您的到来捧场目前我们的公众号已经为上万人提供了帮助,新来的小伙伴,如果你不想错过每一期的资源,需要获取往期分享的资源,可以在公众号菜单栏找到“资源汇总”即可获取到全部资源。公众号内所有资源皆为免费分享,不收取任何费用.公众号内资源大部分来源于网络,不保证永久有效.资源都经过小编实机测试,但不保证兼容所有机型.公众号经过一系列改版现在推送…

    2022年4月16日
    59
  • K8S状态为evicted

    K8S状态为evicted报错:xxisEvictedonxx主机查询找出Evicted状态节点kubectlgetpods|grepEvicted删除节点,自动重启kubectldeletepod$podName也可以通过脚本定时执行kubectlgetpods|grepEvicted|awk'{print$1}’|xargskubectldeletepodxargs是给命令传递参数的一个过滤器,可以将管道或标准输入的数据转换成参数原因

    2022年5月17日
    120
  • IMG镜像写盘工具physdiskwrite,用于MikroTik RouterOS的安装(Windows)

    IMG镜像写盘工具physdiskwrite,用于MikroTik RouterOS的安装(Windows)常用img的备份:1、linux下使用dd,Windows下使用WinImage2、或者还有很多,比如再生龙等等。img还原:1、Win32DiskImager2、physdiskwritephysdiskwrite的简单使用:physdiskwrite.exe-uusb.img出现如下提示:千万不要选错了盘。软件参数:…

    2025年6月29日
    0
  • java JSON使用之JSONObject、JSONArray与Object的转换

    java JSON使用之JSONObject、JSONArray与Object的转换1、将java对象转换成json字符串:     Personp1=newPerson();     p1.setName(“xxx”);     p1.setAge(18);     StringjsonStr=JSONObject.fromObject(p1).toString();2、将

    2022年5月31日
    34
  • 红模仿在说谁(评价红模仿)

    各位读者,知识无穷而人力有穷,所以,要么改需求,要么找专业人士,要么自己研究。大家可以点赞、收藏、关注、评论我啦、需要完整文件随时联系我或交流哟~!

    2022年4月12日
    50
  • 本以为java语言很难学,其实就学完下面这些知识,就能理解了

    本以为java语言很难学,其实就学完下面这些知识,就能理解了刚毕业,找工作,很多人都面临相同的问题。自己能做什么?什么工作既舒服,福利又好(不存在的,除非银行你家开的)。然后社会是个发展的社会,现代人的生活越来越智能,生活中其实充满“技术”!!!所以,在各个岗位中,其实编程类的岗位工资是平均水平最高的。可以加你Java资料分享群java《学习》+交流523401738作为5大编程语言的JAVA是当今最受各大公司的青睐,很多项目,很多工程都需要用到java…

    2022年7月8日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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