作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法使用非静态内部类名作为类型参数?像这样的东西:
public class Foo {
...
// non-static inner class
public class Bar {
...
}
}
在某个地方
public Baz<Bar> obj;
如果 Bar 类是静态的,我可以这样写
public Baz<Foo.Bar> obj;
但在这种情况下,Foo 中的非静态变量不能在 Bar 中使用。问题是我需要在 Bar 中使用 Foo 的非静态成员。
基于 Java Play 框架的 Web 应用程序的真实情况:
public class SignupController extends Controller {
@Inject
private UserService userService;
...
public class SignupForm {
public String validate() {
if (userService.findUserByEmail(email) != null) {
return Messages.get("error.email.is.in.use");
}
return null;
}
}
}
在 View 模板中
@(signupForm: Form[controllers.SignupController.SignupForm])
...
userService 必须在内部类 SignupForm 中可见,并且不能是静态的。这就是为什么 SignupForm 也不能是静态的。
不幸的是,这不会被编译。
是否可以使用 SignupForm 作为 Form 类的类型参数?
提前致谢。
最佳答案
public Baz<Foo.Bar> obj;
要按上述方式访问内部类,不需要将其设为静态。它可以直接访问并且完美编译。
为什么这样有效:Qualified Type Names
因为你试图访问是一个使用类型的类型,这对于java编译器来说是完全合法的。
这是一个示例代码。完美编译:
public class outer {
public class inner {
}
}
class another {
private List<outer.inner> list = new ArrayList<>();
public List<outer.inner> method() {
return new ArrayList<>();
}
}
关于java - 非静态内部类名作为类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34727397/
我是一名优秀的程序员,十分优秀!