Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态引用类(Java)_Java_Oop - Fatal编程技术网

动态引用类(Java)

动态引用类(Java),java,oop,Java,Oop,我有一个HashMap,使用类作为键和值,链接一个类(键)和另一个类,该类将键类的实例作为其构造函数的唯一参数 我的代码如下所示: HashMap<Class<?>, Class<?>> links = //Instantiation //Adding some things to the map Object object = //The instance I'll use to build some other thing Class<?> V

我有一个HashMap,使用类作为键和值,链接一个类(键)和另一个类,该类将键类的实例作为其构造函数的唯一参数

我的代码如下所示:

HashMap<Class<?>, Class<?>> links = //Instantiation
//Adding some things to the map
Object object = //The instance I'll use to build some other thing
Class<?> ValueClass = this.links.get(object.getClass());
    try {
        return new ValueClass(object);
    } catch (NullPointerException e) { //Not in the HashMap
        //Some exception handling
    }
HashMap>links=//实例化
//在地图上添加一些东西
Object=//我将用来构建其他东西的实例
Class ValueClass=this.links.get(object.getClass());
试一试{
返回新的ValueClass(对象);
}catch(NullPointerException e){//不在HashMap中
//一些异常处理
}
我对Java和良好的编码实践知之甚少,因此除了想知道如何正确地进行这项工作外,我还想知道这样做是否有重要意义,是否有更好的方法


提前谢谢

这将根据您的描述创建对象

Constructor<?> constr = ValueClass.getConstructor( object.getClass() );
Object newObj = constr.newInstance(object);
Constructor constr=ValueClass.getConstructor(object.getClass());
Object newObj=constr.newInstance(Object);

所有类型的异常都可能由此引发-请参阅javadoc。

这不可编译。在这里,您真正想做什么?这在Java中是一种非常不寻常的模式(特别是对于刚接触Java的人来说),感觉就像是一个抽象工厂。@Davidermann我想他想创建一个存储在映射中的值的实例,无论使用什么键来获取该值,创建它的一个实例,并将其传递给created@DavidEhrmann上下文如下:我想通过套接字发送一些JSON对象,但我不想要JSON格式的完全相同的对象;我想要它的“简化”版本。键是可以简化的类,值是它们的简化版本。值类将其对应的“膨胀”类的一个实例作为其构造函数的唯一参数。@因此,所有简化版本的Foo(如果Foo是可简化的)都将是相同的?我认为这个答案可以改进,以考虑到:(1)不需要
(2)变量是以camelCase和(3)形式编写的
const
是保留字。@abl-Ah,未使用的保留关键字。但是我坚持使用OP的变量名,我真的不知道要构造的类的范围。