我知道这是 java.lang.reflect。* 的一部分,但是我无法找到任何建议来指出我如何解决这个问题。
我想使用字符串的内容来创建一个具有字符串存储名称的对象的实例。
EG。
String[] carName = {"volvo","vw","bmw"};
car carName[0];
car carName[1];
car carName[2];
我偶然发现了这个看起来很有希望的片段:
Car car = (Car) Class.forName("Volvo").newInstance();
它抛出:Unhandled exception type ClassNotFoundException
编辑:抱歉不够清楚,我不是一个专业人士。不,我没有一个名为沃尔沃的课程。我实际上是在尝试定义一个泛型类(car),然后通过字符串初始化它的实例。
答案 0 :(得分:4)
您需要catch
ClassNotFoundException
,或声明从您的方法中抛出
您需要指定班级的完全限定名称。如果该类打包为foo.cars.Volvo
,则将其用作名称。
答案 1 :(得分:3)
看起来您引用的类不在类路径中。请务必参考完整的包裹,例如
com.example.Volvo
使用Class.forName()
时。
答案 2 :(得分:0)
您是否有一个名为Volvo
的课程,其扩展为Car
?
Class.forName
需要一个完全合格的类名,因此它可能是org.example.Volvo
或您为其命名的任何内容。
或者您是否正在尝试创建一个值为carName的新车对象?
修改强>
然后你要找的东西可能更像(我没有尝试编译它,所以...)
string[] names = { "Volvo", "BMW", "Volkswagen" };
List<Car> cars = new ArrayList<Car>();
for(string name : cars)
{
// presuming you have a class Car with a constructor that takes a string
cars.Add(new Car(name));
}
如果你已经知道你有一个名为car的课程,你不需要乱用任何反射的东西来创建一个。