gpt4 book ai didi

java.lang.NoSuchMethodException 和参数化构造函数

转载 作者:行者123 更新时间:2023-11-30 04:24:49 25 4
gpt4 key购买 nike

我有一个 Foo 类,如下:

public class Foo extends Bar
{
public Foo(com.example.X displayState, com.example.Y parent)
{
super(displayState, parent);
}
}

Bar 类如下所示:

public abstract class Bar {

public Bar(com.example.X displayState, com.example.Y parent)
{
// do something with received params
}
}

此外,还有一个具有以下方法的工厂类:

 public static Object getInstance(Class theSourceClass, Class theTargetClass, Class[] parameterClasses, Object[] parameterValues)
{
Class theClass = (theTargetClass == null) ? theSourceClass : theTargetClass;

try
{
Constructor classConstructor = theClass.getConstructor(parameterClasses);
return classConstructor.newInstance(parameterValues);
}
catch (NoSuchMethodException exp)
{
// log
}

问题是 NoSuchMethodException 异常总是出现:

java.lang.NoSuchMethodException: com.example.Foo.<init>(com.example.X, com.example.Y)
at java.lang.Class.getConstructor0(Class.java:2715)
at java.lang.Class.getConstructor(Class.java:1659)
at com.example.MyFactory.getInstance(MyFactory.java:30)

我已经调试了代码,并且类信息具有有关已定义构造函数的正确详细信息;但是,这里有异常(exception)。

有人知道错过了什么吗?谢谢!

最佳答案

以下示例将生成 Foo 的实例。该示例确保 Bar 中存在接受 XY 的构造函数。

Foo.java

public class Foo extends Bar {
public Foo(com.example.X displayState, com.example.Y parent) {
super(displayState, parent);
}
}

Bar.java

import com.example.X;
import com.example.Y;


public class Bar {

public Bar(X displayState, Y parent) {
// TODO Auto-generated constructor stub
}

}

X.java

package com.example;

public class X {

}

Y.java

 package com.example;

public class Y {

}

测试.java

import java.lang.reflect.Constructor;

import com.example.X;
import com.example.Y;

public class Test {
public static void main(String[] args) {
Class[] classes = {X.class, Y.class};
Object[] values = {new X(), new Y()};

Object obj = getInstance(Foo.class, null, classes, values);

System.out.println(obj);
}

public static Object getInstance(Class theSourceClass,
Class theTargetClass, Class[] parameterClasses,
Object[] parameterValues) {
Class theClass = (theTargetClass == null) ? theSourceClass
: theTargetClass;

try {
Constructor classConstructor = theClass
.getConstructor(parameterClasses);
return classConstructor.newInstance(parameterValues);
} catch (Exception e) {

}
return null;
}
}

关于java.lang.NoSuchMethodException 和参数化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16210019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com