gpt4 book ai didi

java - 将 C# 转换为 Java。调用泛型类构造函数的 newInstance() 总是返回 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 01:28:24 25 4
gpt4 key购买 nike

我对 Java 还很陌生。我正在尝试从 C# 移植代码,但在创建泛型类的实例时遇到问题,但我不断收到 NullPointerExceptions。在这方面已经有一段时间了,需要另一双更有经验的眼睛。

这是 C# 版本:

public static T CreateInstance<T>(WebdriverContext context) where T : WebSiteControl
{
//If type has constructor with 1 parameter and is type IContext. Then use that.
//Else use default constructor.

var type = typeof(T);

//First constructor attempt.
var ctor = type.GetConstructor(new[] { context.GetType() });
if (ctor != null)
{
var ctrl = (T)ctor.Invoke(new object[] { context });
return ctrl;
}

//Second constructor attempt.
ctor = type.GetConstructor(Type.EmptyTypes);
if (ctor != null)
{
var ctrl = (T)ctor.Invoke(new object[] { });
ctrl.WebContext = context;
return ctrl;
}

throw new Exception("No appropriate constructors found for " + type.Name);
}

这按预期工作。Java版本如下:

public static <T extends WebSiteControl> T CreateInstance (Class<T> clazzType, WebdriverContext context) throws Exception{
//If type has constructor with 1 parameter and is type IContext. Then use that.
//Else use default constructor.
Constructor ctor = clazzType.getSuperclass().getConstructor(new Class[] {context.getClass()});

//First constructor attempt.
if (ctor != null)
{
T ctrl = (T)ctor.newInstance(new Object[] {context});
return ctrl;
}

//Second constructor attempt.
ctor = clazzType.getSuperclass().getConstructor(ctor.getClass());
if (ctor != null)
{
T ctrl = (T) ctor.newInstance(new Object[] { });
ctrl.WebContext = context;
return ctrl;
}
throw new Exception("No appropriate constructors found for " + clazzType.toString()+".");
}

一切正常,直到我到达终点线

T ctrl = (T)ctor.newInstance(new Object[] {context});

每当我尝试以任何形式使用 newInstance() 时,它都会抛出 NullPointerException。 ErrorMessage.img

我觉得我错过了一些非常明显的东西。有人知道我错过了什么吗?

最佳答案

由于 NullPointerException 被包装在 InitationTargetException 中,根据 Oracle Docs ,实际源必须位于被调用的构造函数中的某个位置。 :

Throws: InvocationTargetException - if the underlying constructor throws an exception.

您发布的代码看起来不错。

不相关的细节:如果没有找到方法,getConstructor() 不会返回 null,而是抛出异常,因此您的第二次尝试将永远不会到达。

关于java - 将 C# 转换为 Java。调用泛型类构造函数的 newInstance() 总是返回 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57567901/

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