我遇到麻烦的概念是如何将令牌(例如Apple.class
)传递给方法,然后访问子类的静态方法,以便检索有关子类的通用信息?(在这种情况下,a一个苹果的通用图像)如何从Class令牌访问子类的静态方法?
下面是一些类似Java的psudocode:
abstract class Food {
}
class Apple extends Food {
static Image getImage(){
return (generic image of an apple);
}
}
class Onion extends Food {
static Image getImage(){
return (generic image of an onion);
}
}
void arrayManager(Class<? extends Food> foodToken){
useImage(foodToken.getImage()); // <-- can't access static methods from Class token
storeType(foodToken);
}
//... executing code ...
arrayManager(Apple.class);
arrayManager(Onion.class);
执行代码需要告诉arrayManager()
什么样就是了储存的食物。方法arrayManager()
显示一个简单的通用图像并存储该标记供以后参考。但是我找不到获取特定子类的通用映像的方法。
如果arrayManager()
方法要实例化传入的令牌,则没有问题,我可以只:
foodToken.newInstance();
然后我可以调用的GetImage()
非静态版本。
但是,当我只想让一个静态方法给我一个不与特定的Apple实例关联的通用图像时,必须实例化一个Food类型对象(在调用arrayManager()
之前),似乎是荒谬的。如果我存储该标记并临时实例化以检索图像,则必须实例化,然后每次从该子类的静态方法需要某个东西时将对象扔掉。如果我实例化并存储实际对象而不是标记,那么我需要存储数千个相同的对象才能获取通用信息。
我一直在努力解决这个问题的几个星期的版本。到目前为止,我还没有发现任何似乎包含令牌传入方法的问题。如果我的方法是全面的,我会接受其他方式去处理事情。我希望我不必使用大量的反射代码。 谢谢您的阅读。
你可以使用反射,但它不会更简单,将其更改为'arrayManager(Class <?extends Food> foodToken,Image img)'? – nullptr 2013-05-04 17:44:15
很棒的建议,我没有想到这个想法。尽管它确实降低了令牌的效用。 – user2350212 2013-05-05 01:05:59