gpt4 book ai didi

java - 匿名类的原始 FQDN

转载 作者:行者123 更新时间:2023-12-01 22:06:43 26 4
gpt4 key购买 nike

我想将属性存储在 Map 中按其类,即映射应仅包含任何运行时类型的一个对象。当前已经有一个实现(它是一个现有项目),并且该机制是通过 Map<String, Object> 实现的。 .

当前实现:

import com.foo.IConfiguration;
public class ClientCode {
private Options options = new Options();
public void putMethod() {
options.subOptions(new IConfiguration() {
public void configure() {}
});
}

public Object getMethod() {
return options.getSubOption(IConfiguration.class);
}
}
public class Options {
private Map<String, Object> map = new HashMap<>();

public void subOptions(Object subOptionsValue) {
if (subOptionsValue != null) {
map.put(subOptionsValue.getClass().getName(), subOptionsValue);
}
}
public Object getSubOption(Class<?> subOptionsClass) {
return subOptionsClass == null ? null : map.get(subOptionsClass.getName());
}
}

但是,这对于匿名类来说并不像我想要的那样工作。在这种情况下,getName()相关方法将 Options$1或类似的东西,而我需要它来放置 com.foo.IConfiguration这样我就可以在 getMethod() 中可靠地使用它。

我已经查看了 API java.lang.Class ,但我找不到任何可以让我回到 com.foo.IConfiguration 定义的内容。 。好吧,我可以,但这并不是万无一失的:clazz.getInterfaces()给出了一个接口(interface)数组,这在这里很好,但我也可以创建一个 new Object() {}或本地类(class),或常规公开类(class)。

那么有没有一种不错的方法来明确检索匿名类的接口(interface)或父类(super class)的 FQDN?

最佳答案

匿名类没有可以依赖的完全限定名称,但您可以通过ob.getClass().isAnonymousClass()检查对象是否是匿名类。然后,仅当返回 true 时,您才可以检索父类(super class)或超接口(interface)。

您至少还应该考虑处理 lambda,即使您还不打算在 Java 8 上运行它。

关于java - 匿名类的原始 FQDN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32609085/

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