在Java中调用参数化类的静态方法

发布于 2025-01-05 08:21:58 字数 146 浏览 1 评论 0原文

我有一个扩展同一个超类的类列表,其中有一个名为 foo 的静态字段:

List<Class<? extends SuperClass>> list;

如何访问该列表的元素上的 foo ?

I have a list of classes that extend the same superclass, which has a static field called foo:

List<Class<? extends SuperClass>> list;

how can I access foo on an element of that list?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

月亮坠入山谷 2025-01-12 08:21:58

为什么

Superclass.foo

不应该工作?由于它是静态的,因此您的 List 完全无关。还有子类,因为该字段在Superclass 中只存在一次。

Why should

Superclass.foo

not work? Since it is static, your List is completely irrelevant. And also the child classes, since the field exists exactly once in Superclass.

孤芳又自赏 2025-01-12 08:21:58

您可以通过类名访问超类上的静态字段 foo:

 SuperClass.foo

静态字段在所有实例和所有子类中都具有一个值。

You can access a static field foo on a superclass through the class name:

 SuperClass.foo

A static field has one value across all instances and all subclasses.

┾廆蒐ゝ 2025-01-12 08:21:58

类名及其静态成员:

SuperClass.foo

The class name and his static member:

SuperClass.foo
A君 2025-01-12 08:21:58

我认为这里的问题是你试图在类上调用静态方法,而不是在超类的子类上调用静态方法。

假设您有一个类 Foo,它有一个返回字符串的静态方法 bar。您可以这样做:

String test = Foo.bar();

但不能这样做:

String test = Foo.class.bar();

您的示例中的内容更像是这样:

Class<? extends SuperClass> classz = Foo.class;
String test = classz.bar(); // same as Foo.class.bar();

解决方案: 此时您应该能够使用反射来调用该方法:

String test = (String) Foo.class.getMethod("bar").invoke(null);

I think the problem here is that you're trying to call a static method on a Class, not on a class that's a child of SuperClass.

Say you have a Class Foo that has a static method bar that returns a String. You can do this:

String test = Foo.bar();

but you can't do this:

String test = Foo.class.bar();

What you have in your example would be more like this:

Class<? extends SuperClass> classz = Foo.class;
String test = classz.bar(); // same as Foo.class.bar();

Solution: You should be able to use reflection at this point to call the method:

String test = (String) Foo.class.getMethod("bar").invoke(null);
尴尬癌患者 2025-01-12 08:21:58

您可以使 foo 受到保护,这样您就可以在子类中访问它。

You could make foo protected, that way you can access it in a subclass.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文