有没有办法使用非静态内部类名作为类型参数? 类似的东西:
public class Foo {
...
// non-static inner class
public class Bar {
...
}
}
和某处
public Baz<Bar> obj;
如果Bar 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;
}
}
}
在veiw模板中
@(signupForm: Form[controllers.SignupController.SignupForm])
...
必须在内部类SignupForm中看到userService,并且不能是静态的。这就是为什么SignupForm也不能是静态的。
遗憾的是,这不会被编译。
是否可以使用SignupForm作为类Form?
的类型参数提前感谢。
答案 0 :(得分:1)
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<>();
}
}