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

使用反射创建新对象?

查锦程
2023-03-14
问题内容

给定班级价值:

public class Value {

    private int xVal1;
    private int xVal2; 
    private double pVal;


    // constructor of the Value class

    public Value(int _xVal1 ,int _xVal2 , double _pVal)
    {
        this.xVal1 = _xVal1;
        this.xVal2 = _xVal2;
        this.pVal = _pVal;
    }

    public int getX1val()
    {
        return this.xVal1;
    }


...
}

我正在尝试使用创建该类的新实例reflection

从主要:

    .... // some code 
    ....
    ....
    int _xval1 = Integer.parseInt(getCharacterDataFromElement(line));
    int _xval2 = Integer.parseInt(getCharacterDataFromElement(line2));
    double _pval = Double.parseDouble(getCharacterDataFromElement(line3));

     Class c = null;
     c = Class.forName("Value");
     Object o = c.newInstance(_xval1,_xval2,_pval);

...

这不起作用,Eclipse的输出: The method newInstance() in the type Class is not applicable for the arguments (int, int, double)

如果是这样,怎么可以用我创建了一个新的价值目标reflection,在那里我调用ConstructorValue

谢谢


问题答案:

您需要为此找到确切的构造函数。Class.newInstance()只能用于调用null构造函数。所以写

final Value v = Value.class.getConstructor(
   int.class, int.class, double.class).newInstance(_xval1,_xval2,_pval);


 类似资料:
  • 给定的类值: 我正在尝试使用创建该类的一个新实例: 如果是,我如何使用创建一个新的值对象,在这里我调用的? 谢谢

  • 我正在试验反射库发现:https://code.google.com/p/reflections/ 我试图实现的是扫描项目中的一个包,然后创建在该包中找到的给定类型的所有子类的实例。我使用库的方式是正确的,因为子类型返回以下内容: [class identifiers.DNSLookup,class identifiers.AliasChecker,class identifiers.Google

  • 问题内容: 如何使用反射创建内部类对象?内部和外部类均具有不带参数的默认构造函数 问题答案: “如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数必须是封闭的实例;请参见 Java™语言规范的 15.9.3节。” 这意味着您永远不能使用; 构造内部类。相反,您必须使用带有单个实例的构造函数。这是一些示例代码,演示其用法: (请注意,在标准Java术语中, 内部类 始终是非静态的。

  • 问题内容: 我有一个关于反射的问题,我正在尝试使用某种eval()方法。所以我可以打电话给: 现在,我了解到java中没有eval方法,但存在反射。我做了以下代码: 这非常有效(当然,此代码周围有一个try,catch块)。它运行测试方法。但是,我想调用多个都有不同参数的方法。 我不知道这些是什么参数(不仅是String.class)。但这怎么可能呢?如何获得方法的参数类型?我知道以下方法: 但这

  • 问题内容: 可以使用反射在抽象祖先类中创建派生类的实例吗? } 问题答案: 你可以这样做 版画 一种更常见的模式是使用Cloneable 版画 但是,应避免使用两者之一。通常,还有另一种方法可以满足您的需求,因此基础不会隐式地依赖于派生。