gpt4 book ai didi

java - 非静态内部类名作为类型参数

转载 作者:行者123 更新时间:2023-12-01 10:36:02 25 4
gpt4 key购买 nike

有没有办法使用非静态内部类名作为类型参数?像这样的东西:

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/

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