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