这可能是一个愚蠢的问题,但我是Java的新手,所以......
我目前有一些代码,目前正在使用它
clazz.asSubclass(asSubclassOfClass).getConstructor().newInstance()
我需要将一些参数传递给contructort,所以我想将其更改为: clazz.asSubclass(asSubclassOfClass).getConstructor(params).newInstance(args)
我不明白的是我需要传递的是params以及我需要传递给args的东西.
假设我想传入一个字符串"你好"和一些名为XyzObj的XYZ类型的对象.我将如何指定?我会以params的形式通过什么,以及作为args传递给我的是什么?
我有一个初始化的对象:
Object obj = new Object(){
final String type = "java.lang.Integer";
final Object value = 6;
};
Run Code Online (Sandbox Code Playgroud)
我想重新创建这个对象:
Integer i = 6;
Run Code Online (Sandbox Code Playgroud)
有什么方法可以获得对象的type字段obj并使用反射创建一个新实例并将其中的值提供给它?
编辑:在扩展这个问题后,我发现如果我将对象存储在文件中并使用Jackson使用以下文件从文件中检索它:
Reader reader = new Reader();
MyClass[] instances = reader.readValue(fileName);
Run Code Online (Sandbox Code Playgroud)
并MyClass定义为:
class MyClass{
List<Object> fields;
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
现在我正在迭代fields并使用代码将它们转换为适当的对象:
public static Class<?> getTypeForObject(Object field) {
Field returnType = null;
try {
returnType = field.getClass().getDeclaredField("type");
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch …Run Code Online (Sandbox Code Playgroud) 我需要一个函数来在java中创建动态给定类的实例.
我找到了很多样本但是在所有样本中,要实例化的类在运行时之前就已知.
有用户定义的类:
class Student { //some code }
class Teacher { //some code }
class Course { //some code }
Run Code Online (Sandbox Code Playgroud)
我需要的是
List<class> MyFunction(<class>) {
List<class> items = new ArrayList<class>();
for(int i = 0; i < 5; i++) {
create_a_new_class_instance;
items.add(new_created_instance);
}
return items;
}
Run Code Online (Sandbox Code Playgroud)
我将如何使用
List<Student> students = MyFunction(Student);
List<Teacher> teachers = MyFunction(Teacher);
List<Course> courses = MyFunction(Course);
Run Code Online (Sandbox Code Playgroud)
希望有人帮忙.
这是我在Stackoverflow中的第一个问题,对由此带来的任何不便表示歉意.
Utku
我想从name,call构造函数创建类对象并创建新实例.但我不知道如何将参数发送给构造函数.我的基类是:
public carDao(ConnectionSource connectionSource, Class<Car> dataClass) throws SQLException
{
super(connectionSource, dataClass);
}
Run Code Online (Sandbox Code Playgroud)
和我想做的事情:
Class myClass = Class.forName("carDao");
Constructor intConstructor= myClass.getConstructor();
Object o = intConstructor.newInstance();
Run Code Online (Sandbox Code Playgroud)
我应该在getConstructor()中写什么?
可能重复:
使用类名创建实例并调用构造函数
如何根据传递给方法的字符串的内容创建对象?例如
createObj(String nameclass){
**class passed** obj;
}
Run Code Online (Sandbox Code Playgroud) 我在一个名为(tools)的java类中有一个子类(Item),我想在我的应用程序中的几个不同的类中使用我现在想知道的是什么是使用之间的区别
import com.example.tools;
Run Code Online (Sandbox Code Playgroud)
并创建该类的实例:
Tools item = new Tools();
Run Code Online (Sandbox Code Playgroud)
他们是否得到了相同的结果,并且比另一个慢,或者有一个原因我会使用一个而不是另一个.谢谢你的回答.
是否可以在android中执行此操作:
String anewactivity="Zero";
Intent NewActivity = new Intent(context, anewactivity.class);
Run Code Online (Sandbox Code Playgroud)
我试图这样做,但它给了我一个错误.有可能吗?
谢谢!
当我发布问题时,我看到了你给我的答案.但另一个答案不是为我推出的新活动吗?
我使用一种方法从包中收集所有类并将它们保存到一个数组中:
Class[] classes = ClassUtils.getClasses("xyz.keahie.werewolf.character.characters");
Run Code Online (Sandbox Code Playgroud)
它们都有"Character"类作为超类,当我打印它们时,我得到这一行:
class xyz.keahie.werewolf.character.Character
Run Code Online (Sandbox Code Playgroud)
当我想将它们转换为类"Character"时,我总是得到一个ClassCastException.我究竟做错了什么?
编辑:这是我得到的完整错误:
Exception in thread "main" java.lang.ClassCastException: java.lang.Class cannot be cast to xyz.keahie.werewolf.character.Character
at xyz.keahie.werewolf.character.CharacterManager.<init>(CharacterManager.java:29)
at xyz.keahie.werewolf.GameManager.<init>(GameManager.java:26)
at xyz.keahie.werewolf.Game.main(Game.java:9)
Run Code Online (Sandbox Code Playgroud)
在这里我的源代码:
Class[] classes = ClassUtils.getClasses("xyz.keahie.werewolf.character.characters");
for (Class clazz : classes) {
Object object = clazz.getSuperclass();
System.out.println(object.toString());
if (object.getClass().equals(xyz.keahie.werewolf.character.Character.class)) {
System.out.println("Yes");
} else {
System.out.println("Nope");
}
Character character = (Character) object;
if (!this.characters.contains(character)) {
addSpecialCharacter(character);
}
}
Run Code Online (Sandbox Code Playgroud)
很抱歉在开始时缺少信息