gpt4 book ai didi

java - 使用 Java 中的方法将类作为类型传递给其他类

转载 作者:行者123 更新时间:2023-11-29 05:19:23 25 4
gpt4 key购买 nike

我想将 2 个类彼此分开,DataExchange 不是行类的信息,但这会产生问题。

如何解决这个问题?

代码:

class MyActivity {
public void onCrate() {
DataExchange de = new DataExchange(BookRow.Class);
....
}

public class BookRow {
public String book_id;
public String book_title;
}
}

文件数据交换:

class DataExchange<T> {
public DataExchange(Class<T> SendedClass) {
SendedClass[] items = new SendedClass[5]; // main problem
for(int i = 0; i < 5; i++) {
items[i] = new SendedClass(i , "my book title" + i); // problem
}
// ...
}
}

最佳答案

首先,您应该遵守 Java 命名约定,以使事情更容易理解。在你的情况下 SendedClass 是一个参数名称而不是类名,即它应该是 sendedClass 然后会明确你不能像你一样调用构造函数做了。

所以实际上你可以传入任何类,你必须使用反射调用它的构造函数,例如像这样:

items[i] = sendedClass.getConstructor( Integer.TYPE, String.class ).newInstance( i, "my book title" + i);

请注意,这样的构造函数可能不存在,您必须考虑到这一点以及反射可能抛出的大量异常。

使用反射以类似的方式创建数组:

 T[] array = (T[]) Array.newInstance( sendedClass, 5 );

如您所见,以这种方式创建对象并不像看起来那么容易,因此像工厂模式这样的模式很可能在这里有所帮助。

内部类更新:

如果 BookRow 不是内部类会更容易,但它确实需要,您仍然可以使用反射。

来自 getConstructor(...) 上的 JavaDoc:

If this Class object represents an inner class declared in a non-static context, the formal parameter types include the explicit enclosing instance as the first parameter.

因此您需要像这样创建实例(您必须知道或作为参数传递):

sendedClass.getConstructor( MyActivity.class, Integer.TYPE, String.class ).newInstance( myActivityInstance, i, "my book title" + i);

关于java - 使用 Java 中的方法将类作为类型传递给其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401030/

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