如何变换:cut(Orange.class) - >切(橙色)
剪切功能如下图所示:
protected <T extends Fruit> T cut(Class<T> fruitClass){
try {
return fruitClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
}
}
答案 0 :(得分:3)
您可以从传递的实例中获取类型:
protected <T extends Fruit> T cut(T fruit) {
try {
return (T)fruit.getClass().newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// throw some exception or return an alternative instance or null
}
}
答案 1 :(得分:0)
使用.class
进行类识别非常简单,删除它可能会有问题。
但您可以使用Class.forName(String className)功能。
示例:
protected <T extends Fruit> T cut(String fruitClass) {
try {
return Class.forName(fruitClass).newInstance();
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
// throw some exception or return an alternative instance or null
}
}
此功能的用法类似于cut("com.example.fruit.Orange")
。但请记住,您需要传递该类的全名。