为什么以下代码没问题,但是一旦将T作为通用添加到Main,它会抛出以下错误?
' Main.this'无法从静态上下文引用
//public class Main<T> { - uncomment this for the error to appear
public class Main {
public static void main(String[] args) {
new Main();
}
class TestNonStatic {}
private static class TestStatic {
public TestStatic(TestNonStatic nonStatic) { //this is the line that fails
}
}
}
我经历了generics restrictions,但我不明白为什么会导致错误。 我也经历了很多类似的问题,但我不明白为什么添加通用会改变这种情况。
答案 0 :(得分:4)
您的TestNonStatic
具有隐式通用,您必须指定它是否为原始类型
public TestStatic(Main.TestNonStatic nonStatic) {
或通用类型
public TestStatic(Main<String>.TestNonStatic nonStatic) {
或使用非静态类
private class TestStatic {
public TestStatic(/*Main<T>.*/TestNonStatic nonStatic) {
它不会隐式假设以下内容,因为类是static
public TestStatic(Main<T>.TestNonStatic nonStatic) {
为什么没有一些默认行为,可能是因为这可能会导致更加模糊的错误消息;)