当前位置: 首页 > 面试题库 >

非常简单的Java动态转换

唐弘益
2023-03-14
问题内容

简单的问题,但我花了一个多小时。我的代码如下。我需要使SomeClass
sc动态化。因此,您将类名作为字符串传递给函数,然后使用该类代替静态someClass。怎么做呢?

SomeClass sc;
if (someOtherClassObject instanceof SomeClass){
    sc=(SomeClass) someOtherClassObject;

我想要的是

public void castDynamic (String strClassName){
  //cast the classname referred by strClassName to SomeClass 
  //if it is the  instance of SomeClass
}

编辑:上面是简化。实际的代码是这个

public void X(String className, RequestInterface request)
{
    //My current code is this, I need to change so that "XRequest"
    //can be any   class referred by "className", 
    //and "request.getRequest" the object belonging to "className" class
    //I don't want static XRequest xvr, it should be fetched dynamically

    XRequest xvr;
    if (request.getRequest() instanceof XRequest){
        xvr=(XRequest) request.getRequest();
        client.setRequest(xvr); 
    }
}

另一个简单的改写:我使用request.getRequest()得到一个对象。我不知道那个物体是什么。因此,我需要将其强制转换为提供的类字符串名称。怎么做?就这样。–
SQC 13分钟前


问题答案:

您想通过名称 实例化 一个类吗?

首先,您需要创建一个Class<?>对象:

Class<?> cls = Class.forName(strClassName);

然后实例化它(注意,这会引发各种异常-访问冲突,没有参数就ClassNotFound没有 公共 构造函数等)

Object instance = cls.newInstance();

然后可以将其转换为:

return (SomeClass) instance;

请确保您了解以下两者之间的区别:

  1. (大约是文件名)
  2. 对象 (本质上是 类型 信息)
  3. 实例 (此类型的实际对象)

如果需要,还可以将cls对象转换为type Class<? extends SomeClass>。但是,它并不能给您太多。您可以内联到:

return (SomeClass)(Class.forName(strClassName).newInstance());

哦,但是您 可以cls在实例化对象之前对对象进行类型检查。因此,只有在它满足您的API(实现您要获取的接口)的情况下,您才能实例化它。

编辑:向 反射 添加更多示例代码。

例如:

if (cls.isInstance(request)) {
  // ...
}

对于调用方法,您需要知道可以转换为的接口,或者使用 反射 (对象的getMethod方法cls):

Method getRequest = cls.getMethod("getRequest");
getRequest.invoke(request);


 类似资料:
  • 问题内容: 我试图找到一个非常简单,流畅,轻巧的javascript或jquery字幕。我已经尝试过丝绸选框之类的东西,但不适用于我正在使用的应用程序。因此,越短越好,越好-并且越容易调试。有人知道字幕易于实现的JavaScript替换吗? 码 问题答案: 希望这对您有所帮助,加油! html jQuery代码

  • 本文向大家介绍非常简单的Shell菜单脚本,包括了非常简单的Shell菜单脚本的使用技巧和注意事项,需要的朋友参考一下 本文给大家分享一个自己简单编写的Shell菜单脚本,傻瓜式的人机交互,人人都可以操作linux。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 这些方法如下所示: 编辑 我尝试使用、和。 我曾尝试直接在上调用,但它也没有捕捉到这一点。

  • 我有这个方法: 我是这样称呼它的: 我想将< code>Object转换为该方法中的< code>Entity1。我该怎么做? 编辑 我的问题是如何将转换为类的实例?

  • 主要内容:非常简单的英语自我介绍【篇1】,非常简单的英语自我介绍【篇2】,非常简单的英语自我介绍【篇3】,非常简单的英语自我介绍【篇4】,非常简单的英语自我介绍【篇5】,非常简单的英语自我介绍【篇6】,非常简单的英语自我介绍【篇7】,非常简单的英语自我介绍7篇 非常简单的英语自我介绍?有很多人以为自我介绍很难写?其实是没有抓住精髓,把简单的问题给复杂化了。那么下面小编给大家带来了非常简单的英语自我介绍,供大家参考。 非常简单的英语自我介绍【篇1】 My surname is Li wen, lo

  • 问题内容: 我的基础难题是我无法理解django模板,视图和url是如何捆绑在一起的……提示用户输入字符串,然后使用该字符串查询数据库的最简单,最简单的最小方法是什么(最好是w / python模型而不是原始sql查询)?我应该使用GET和POST方法吗?我应该使用表格吗?我需要使用模板还是可以使用通用视图? 当我尝试提交输入时,它只是重新加载了输入页面。 views.py: urls.py 模板