gpt4 book ai didi

java - 从 android 上的名称和内存问题实例化 java 类

转载 作者:行者123 更新时间:2023-11-30 02:18:15 26 4
gpt4 key购买 nike

我正在使用此函数根据其名称、使用其构造函数参数、名称、包和构造函数参数类型来实例化 java 类:

public Object getObjectFromName(Object[] parameters, String objectName, String packageName, Class[] types) {
try {
Class myClass = Class.forName(packageName + objectName);

if (types == null) {
types = new Class[parameters.length];

for (int x = 0; x < parameters.length; x++) {
types[x] = parameters[x].getClass();
}
}
Constructor constructor = myClass.getConstructor(types);
Object object = constructor.newInstance(parameters);
return object;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

我计划在运行 4.4 的 Android 设备上使用它来创建通用 fragment (按照约定实例化其对象)。

它有效,但我目前只在一个对象上使用它,将这种方法用于 5 或​​ 8 个对象时内存泄漏怎么样?它会比普通实例化慢吗?


我的意思是,这是:

adapter = (Adapter) getObjectFromName(parameters);
object = (Object) getObjectFromName(parameters);
dao= (Dao) getObjectFromName(parameters);
object2 = (Object2) getObjectFromName(parameters);
object3 = (Object3) getObjectFromName(parameters);

比以下方式慢(并且用户感知):

adapter = (Adapter) new Adapter(parameters);
object = (Object) new Object(parameters);
dao= (Dao) new Dao(parameters);
object2 = (Object2) new Object2(parameters);
object3 = (Object3) new Object3(parameters);

最佳答案

我明白你想做什么。您希望有一个通用构造函数 来通过反射来实例化对象。虽然这无疑是明智的,但让我们考虑一下它是否也直观:

adapter = (Adapter) getObjectFromName(parameters);

清晰直观
adapter = (Adapter) new Adapter(parameters);

当我们创建新的抽象时,我们需要考虑它们是否是

  • 高效。
  • 可重复使用且广泛适用。
  • 简单直观,即它们大大减少了程序员的工作量。

我个人不认为创建像这样的通用构造函数作为抽象特别有趣。当我通过调用其构造函数之一创建新对象时

Adapter adapter = new Adapter(this);

对于阅读我的代码的任何其他人来说,很明显我正在创建类 Adapter 的新对象,当前 Activity 作为上下文。

此外,正如您所说的那样,使用反射创建新类实例的效率低于直接调用其构造函数。

因此,您需要确定您打算创建的这个新抽象是否对您和阅读您代码的其他人特别有益。

关于java - 从 android 上的名称和内存问题实例化 java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28948775/

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