gpt4 book ai didi

java - 动态改变方法的返回类型

转载 作者:行者123 更新时间:2023-11-29 04:51:04 25 4
gpt4 key购买 nike

我想动态地改变方法的返回类型。例如,我有这样的代码:

class A {

}

class B extends A {
public void animate1() { }
public void animate2() { }
}

class C extends A {
public void animate3() { }
public void animate4() { }
}

class Registry {

private Map<String, A> mMap;

public <T> T get(String key) {
A data = mMap.get(key);

/*
* I would like to implement like this:
* if(data.getClass() == B.class)
* T = B;
* else if(data.getClass() == C.class)
* T = C;
*/

return (T) data;
}

public void put(String key, A data) {
mMap.put(key, data);
}

}

现在我可以这样做了:

        mRegistry.put("key_b", new B());
mRegistry.put("key_c", new C());
((B) mRegistry.get("key_b")).animate1();
((C) mRegistry.get("key_c")).animate4();

我想实现这样的代码(不强制转换):

        mRegistry.put("key_b", new B());
mRegistry.put("key_c", new C());
mRegistry.get("key_b").animate1();
mRegistry.get("key_c").animate4();

该方法可以更改其在某些数据中的以下返回类型,类似于第一个代码(注释的地方)。也许有人知道,如何以另一种方式解决这个问题,但不在 Registry 类之外进行强制转换?

最佳答案

A 类必须有 animate1() 和 animate4()

class A {
void animate1() {
throw new UnsupportedOperationException();
}

void animate4() {
throw new UnsupportedOperationException();
}
}

所以这个编译是因为 get() 方法返回一个 A

mRegistry.get("key_b").animate1();
mRegistry.get("key_b").animate4();

关于java - 动态改变方法的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35385907/

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