- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 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/
我正在尝试使用 XmlPullParser 解析 XML 文档,但出现以下错误 Gradle:错误:找不到符号类 newInstance 创建 XmlPullParserFactory XmlPull
在 Java 中,当存在拒绝访问检查抑制的 SecurityManager 时,Constructor 的 newInstance 方法起作用,而 Class 的 newInstance 抛出 Sec
最近我开始尝试一点反射(reflection)。我遇到了一个找不到任何答案的问题。我会尽力解释问题所在。 首先,我有一个从带有注释的反射中获得的方法。当我尝试调用这个方法时,我当然需要它所在类的一个实
我将从我的示例开始:我有一个类 classload.Loadable 。 package classload; public class Loadable { static{
你好 V8 程序员和 node-gyp'ers。我正在运行 OS X 10.12.6、Node v6.11.1 和 npm v3.10.10、nan v2.6.2,gcc 作为 XCode 的一部分,
我目前正在为自己编写一个私有(private) Java API,它使用 Class允许扩展 API 的特定部分(统计数据保存部分)而不改变底层用法。我喜欢这种方法,但由于某种原因,每当 API 尝试
这个问题已经有答案了: Akka. Android. NoSuchMethodException: (2 个回答) 已关闭 6 年前。 我觉得我错过了一些东西。我正在尝试做下一步: Class.fo
以下代码返回 null: private JComponent setupComponent(Class c, Object... constructor) { try {
我正在尝试了解如何使用 Api.camera2我正在关注此链接中的谷歌样本 https://github.com/googlesamples/android-Camera2Basic 当我打开项目时,
我有一个抽象 fragment 类(称为 A)和一个扩展它的 fragment 类(称为 B)。我目前在制作 B 类的对象时调用 newInstance,但我想知道我如何也可以为 A 类做类似的事情,
我正在从 bignerdranch 学习 android 开发,我正在尝试实现寻呼机适配器,但在 Android Studio 中出现无法解析 newInstance 方法的错误。我在每个类中使用支持
我一直在研究一种实例化方法,它允许我将各种相似的类打包到一个外部类中。然后我可以通过将该类型的名称传递给构造函数来实例化每个唯一的类类型。经过大量的研究和错误,这就是我想出的。我留下了一个错误,以证明
调用 newInstance() 是否有惩罚,或者它下面的机制是否相同?newInstance() 对 new 关键字* 有多少开销(如果有的话)? *:忽略 newInstance() 意味着使用反
这个问题在这里已经有了答案: Instantiate a class object with constructor that accepts a string parameter? (4 个回答)
我正在处理一个解析 xml 文件的项目,我在使用 SAXParserFactory 和 DocumentBuilderFactory 时遇到了问题。对于他们两个,当我尝试调用 newInstance(
我编写了在打印之前将文档转换为字符串的代码 TransformerFactory tf = TransformerFactory.newInstance(); Tran
我在进行重构时遇到了这种情况,所以我想知道它们之间是否存在任何差异? 例如: import java.util.List; import java.lang.reflect.Array; public
我通过 bean 脚本框架使用 rhino 在我的 java 进程中创建和配置对象。脚本中使用的一些类需要动态加载,因为它们并不总是位于标准类路径上。 为了加载这些类,我使用自定义类加载器初始化脚本框
我正在编写一个有两个 ArrayList 的类字段。一种是用于包含自定义对象。另一个用于包含自定义集合对象(也可能具有这些字段): private ArrayList myObjList;
我需要从一种类型转换为另一种类型。谷歌搜索但卡住了。假设我想将 initObject 转换为 Casted 类。 Object objInstance = initObject.getClass().
我是一名优秀的程序员,十分优秀!