我想知道,在Java中,是否有一种方法可以从实现多个接口的类创建对象,但是在运行时选择应该实现哪些接口。这些接口没有方法,这是通过在运行时定义哪些属性应该具有来创建对象的方法。这是我真正的问题。 使用案例:我有一个具有大量属性的类,但是从这个类创建的对象只使用其中的一些属性,有些属性在对象之间是共同的,有些属性应该由用户在运行时决定。我想避免创建具有大量空属性的对象。
答案 0 :(得分:1)
也许一个Proxy类可能很有趣。
我会考虑测试功能/功能:
interface Flying { void fly(); }
interface Swimming { void swim(); }
Animal animal = ...
Optional<Flying> flying = animal.lookup(Flying.class);
flying.ifPresent(f -> f.fly()); interface Flying { void fly(); }
Optional<Swimming> swimming = animal.lookup(Swimming.class);
swimming.ifPresent(sw -> sw.swim());
Animal不需要实现任何界面,但您可以查找(lookup
或as
)功能。这在未来是可扩展的,动态的:可以在运行时更改。
实施
private Map<Class<?>, ?> map = new HashMap<>();
public <T> Optional<T> lookup(Class<T> type) {
Object instance = map.get(type);
if (instance == null) {
return Optional.empty();
}
return Optional.of(type.cast(instance));
}
<S> void register(Class<S> type, S instance) {
map.put(type, instance);
}
该实现执行安全的动态转换,因为寄存器确保安全填充(键,值)条目。