gpt4 book ai didi

java - 参数化泛型类实例可以根据类型参数具有不同的方法吗?

转载 作者:行者123 更新时间:2023-12-02 05:27:00 25 4
gpt4 key购买 nike

在回答以下问题时: How do I create a Builder that can build more than one kind of Java object?我认为在Java中不可能实现以下功能:

public class Builder<T> {
// ...
}

Builder<User> userBuilder = new Builder<User>();
// here userBuilder only has method 'name'
userBuilder.name("John");

Builder<Country> countryBuilder = new Builder<Country>();
// here countryBuilder only has method 'code'
countryBuilder.code("UA");

但是,在评论中,用户John Feminella告诉我们实际上可以使用自定义类加载器。

现在,我了解了 Java 类加载器的基础知识,但真的不知道它们如何改变 Java 语法。有人可以给出如何实现这一目标的基本想法吗?

提前致谢!

附注不需要长代码片段 - 使用标准术语进行简短解释即可。

最佳答案

之所以困难是因为Java的内置类加载器在添加类后不会重新加载类,并且需要重新加载类(在Java中)才能动态添加方法。此外,ClassLoader.resolve() 方法是final,这意味着自定义类加载器无法覆盖它。这有很多影响,但最重要的一个是,如果您想要重新加载一个类,则每次想要加载它时都必须实例化一个新的 ClassLoader。

这非常昂贵,因此实际上没有实际理由尝试以这种方式解决 Java 的局限性。 (您应该使用另一种更适合此类工作的语言,例如 JRuby。)动态加载东西是可能的,但这是不值得的。

但是,假设你愿意承受一些痛苦,你能做到吗?绝对地。例如,参见 this article 。那里使用的策略是:

  • 在运行时编译 Java 代码
  • 通过代理类在运行时加载/重新加载 Java 类
  • 将最新的类链接到其调用者

关于java - 参数化泛型类实例可以根据类型参数具有不同的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25920002/

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