Java泛型使用 公共类A实现了SomeInterface{ ... B类{ .... } .... }

Java泛型使用 公共类A实现了SomeInterface{ ... B类{ .... } .... },java,generics,Java,Generics,Class B是在Class A中声明的,所以当我编写SomeInterface时,尽管B只在A中声明,但它会工作吗?类似于: public class A implements SomeInterface<B>{ ... class B{ .... } .... } interface-SomeInterface{ 无效行为(T); } 公共类A实现了一个接口{ 公开无效行为(A.B.ab){} B类{} } 概念上没有问题 就语法而言,B如

Class B
是在
Class A
中声明的,所以当我编写
SomeInterface
时,尽管B只在A中声明,但它会工作吗?

类似于:

public class A implements SomeInterface<B>{
    ...
    class B{
     ....
    }
 ....
}
interface-SomeInterface{
无效行为(T);
}
公共类A实现了一个接口{
公开无效行为(A.B.ab){}
B类{}
}

概念上没有问题


就语法而言,
B
如果没有
import

“在..中声明的成员m的声明范围。类类型C是C的整个主体”

所以这些是非法的

interface SomeInterface <T> {
    void doing (T t);
}

public class A implements SomeInterface <A.B> {
    public void doing (A.B ab) {}
    class B {}
}
@Anno(M.class)//非法
类C实现了X//非法
M类
但我认为这限制太大了;它本可以再延长一点。考虑

@Anno(M.class)  // illegal
class C implements X<M>  // illegal
      class M
@Anno(C.class)//合法
类C实现X//legal
这是因为顶级类
C
的范围是整个“类型声明”,而不仅仅是“整个主体”。我们没有理由不能将M的scrope扩展为“C的整个类型声明”


另请参见

这在Java中不是模板。当您尝试它时发生了什么?正如aix所建议的,您可以通过尝试来了解自己。问题是:你想做什么?如果你解释了你的目标和你所做的尝试,这里的人可能会帮助你。嗯……未知用户的回答表明这是可能的,那么你的结论“否”具体指的是什么?这与注释有什么关系?@Mark Peters
A.B
不是
B
@不可更改的:它是同一个引用,但我只是想确定你的结论是基于OP给出的确切代码,而不是他试图做的事是否可能。@Mark Peters OP想在A的身体外直接引用B。那是不可能的。(好吧,
import A.B
在A.java中是可能的。但这太荒谬了)@Mark Peters好的,我明白了-你认为问题是语义,我认为问题是语法。当然
B
可以在
A
之外引用,但不能在OP给出的语法中引用。
@Anno(C.class)  // legal
class C implements X<C>  // legal