我知道这是一个可怕的黑客,但我需要编辑外部库以符合我们项目的需要。我正在更改的项目将类的映射存储到所述类的实例。该项目的初衷是让不可能有重复的课程,但我需要它们。我的解决方案是将UniqueClass字段应用于每个相关对象,然后每个对象也引用我创建实例所需的类。通过这种方式,UniqueClass实际上并不重要,只是它是唯一的。
现在,我需要一种在运行时创建一个唯一类来存储在这个地图中的方法。以下是我看到的选项:
在运行时生成并编译实际的.java文件。我实际上实现了它并且它可以工作,但它有点慢并且需要JDK(因为它需要访问某些库而不能与JRE一起使用)。我不想要求JDK配置,因为非开发人员可能会使用此功能。
生成一个唯一的匿名类。这有效,但仅限于第一个副本。任何其他重复项都被视为与原始匿名类(ClassBuilder $ 1)相同。我读过here可能有ClassBuilder $ 2等,但我不知道怎么做。
Object object = new Object(){};
return object.getClass();
使用Proxy类。我并不是真的理解这些,但它与上面的匿名类具有相同的结果,因为javadocs声明如果代理类已经存在,它只返回那个。
Class proxyClass = Proxy.getProxyClass(inter.class.getClassLoader(), new Class[] { inter.class });
return proxyClass;
(真正最可怕的方式)创建一个迭代的类包,因为每个类都用作UniqueClass。丑陋的代码,许多不必要的类,最终可能限制重复数量。
这个问题有一个优雅的解决方案吗?
答案 0 :(得分:0)
我正在修改源代码本身。
在这种情况下,创建一个包装器对象以用作Map
中的键。您可以根据需要覆盖equals()
和hashCode()
以实现目标。实质上,您正在向现有的类和实例的多映射添加一个间接层。