根据通用类型创建新对象

神秘挑战者

是否可以基于泛型类型创建新对象。例如,我有几个自定义对象,我想调用一个泛型方法,该方法基于该泛型类型创建一个新对象。

public static void main(String[] args) {
    Customer cust = myObject("str");
    Vendor vend = myObject("str");
    ...
}

public static <T> T myObject(String str) {
    return new T(str);
}

我读了几本书,我知道,你不能那样做,但我无法使它起作用。例如,我已经尝试过,type.isInstance(str)但是我的编辑说,我不应该使用它,并且它实际上是行不通的。那么应该怎么做呢?

托马斯·弗里奇

我不知道为什么要通过通用的通用方法创建不同类型的对象。对我来说,它闻起来像是一个不好的设计。

话虽如此,您可以通过以下方式实现它:

public static <T> T myObject(Class<T> type, String str)
        throws InstantiationException, IllegalAccessException,IllegalArgumentException,
               InvocationTargetException, NoSuchMethodException, SecurityException
{
    return type.getDeclaredConstructor(String.class).newInstance(str);
}

您会看到,上面的方法接收到一个Class参数,因此它知道新创建的对象应该属于哪个类。该方法首先获取可以接受一个String参数的构造函数。然后,调用构造函数以实际创建对象。

您会发现,getDeclaredConstructornewInstance方法可能会引发许多不同的异常。因此,您将需要通过一些try / catch代码来处理这些异常。(为简便起见,我在此处的代码中省略了此步骤,仅添加了一个throws声明。)这引起了有关此方法设计的一些危险信号。

上面的方法将像这样使用:

public static void main(String[] args) throws Exception
{
    Customer customer = myObject(Customer.class, "str");
    Vendor vendor = myObject(Vendor.class, "str");
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

创建通用类型的对象

来自分类Dev

创建通用类型的对象

来自分类Dev

创建一个接受类型对象的通用方法并返回一个新的类型对象

来自分类Dev

如何创建通用类型类的新实例

来自分类Dev

根据python中给定对象的类型创建一个新对象

来自分类Dev

TypeScript遍历对象并根据值创建类型

来自分类Dev

根据用户输入创建特定类型的对象

来自分类Dev

根据提供的参数创建新对象

来自分类Dev

创建知道反射类型的新对象

来自分类Dev

如何在Scala中创建通用类型的对象/单例?

来自分类Dev

是否可以在TypeScript中创建通用的映射对象类型?

来自分类Dev

如何根据并集/相交对象类型的值创建类型?

来自分类Dev

jq-根据现有对象创建新对象

来自分类Dev

添加通用类型对象

来自分类Dev

根据confirm() 结果创建一个新对象

来自分类Dev

使用FakeItEasy,可以创建带有通用类型参数的类型的虚拟对象

来自分类常见问题

从泛型类中的类型参数创建新对象

来自分类Dev

TypeScript中是否可以直接从对象的键创建新类型?

来自分类Dev

对象值参数的通用类型

来自分类Dev

对象值参数的通用类型

来自分类Dev

根据类型创建表

来自分类Dev

Java创建通用对象的映射

来自分类Dev

无法模拟通用对象创建

来自分类Dev

打字稿创建通用对象

来自分类Dev

如何根据f#中定义的类型的对象生成新的不可变对象?

来自分类Dev

DbSet.Cast <TEntity>()错误:无法从非通用DbSet为类型'Entity'的对象创建DbSet <IEntity>

来自分类Dev

使用通用类型接口创建对象实例时发生编译错误

来自分类Dev

DbSet.Cast <TEntity>()错误:无法从非通用DbSet为类型'Entity'的对象创建DbSet <IEntity>

来自分类Dev

从对象列表创建运行时已知类型的列表并调用通用方法

Related 相关文章

  1. 1

    创建通用类型的对象

  2. 2

    创建通用类型的对象

  3. 3

    创建一个接受类型对象的通用方法并返回一个新的类型对象

  4. 4

    如何创建通用类型类的新实例

  5. 5

    根据python中给定对象的类型创建一个新对象

  6. 6

    TypeScript遍历对象并根据值创建类型

  7. 7

    根据用户输入创建特定类型的对象

  8. 8

    根据提供的参数创建新对象

  9. 9

    创建知道反射类型的新对象

  10. 10

    如何在Scala中创建通用类型的对象/单例?

  11. 11

    是否可以在TypeScript中创建通用的映射对象类型?

  12. 12

    如何根据并集/相交对象类型的值创建类型?

  13. 13

    jq-根据现有对象创建新对象

  14. 14

    添加通用类型对象

  15. 15

    根据confirm() 结果创建一个新对象

  16. 16

    使用FakeItEasy,可以创建带有通用类型参数的类型的虚拟对象

  17. 17

    从泛型类中的类型参数创建新对象

  18. 18

    TypeScript中是否可以直接从对象的键创建新类型?

  19. 19

    对象值参数的通用类型

  20. 20

    对象值参数的通用类型

  21. 21

    根据类型创建表

  22. 22

    Java创建通用对象的映射

  23. 23

    无法模拟通用对象创建

  24. 24

    打字稿创建通用对象

  25. 25

    如何根据f#中定义的类型的对象生成新的不可变对象?

  26. 26

    DbSet.Cast <TEntity>()错误:无法从非通用DbSet为类型'Entity'的对象创建DbSet <IEntity>

  27. 27

    使用通用类型接口创建对象实例时发生编译错误

  28. 28

    DbSet.Cast <TEntity>()错误:无法从非通用DbSet为类型'Entity'的对象创建DbSet <IEntity>

  29. 29

    从对象列表创建运行时已知类型的列表并调用通用方法

热门标签

归档