Mar*_* A. 4 java anonymous-inner-class subclassing interface-implementation
假设我有以下两个类/接口定义:
public abstract class FooClass {
    public abstract void doFoo();
}
和
public interface BarInterface {
    public void doBar();
}
如果我想创建一个扩展/实现两者的匿名内部类,我是否需要这样做:
public abstract class BothClass extends FooClass implements BarInterface {}
...
new BothClass() {
    public void doFoo() {
        System.out.println("Fooooooooo!!!!");
    }
    public void doBar() {
        System.out.println("Baaaaaaaar!!!!");
    }
}.doBar();
或者是否有一个允许我不定义的捷径BothClass?这样的事情,也许:
new (FooClass implements BarInterface)() {
    public void doFoo() {
        System.out.println("Fooooooooo!!!!");
    }
    public void doBar() {
        System.out.println("Baaaaaaaar!!!!");
    }
}.doBar();
(这个想法给了我几个错误,这些都没有帮助)
Java编译器自动从类实例创建表达式派生匿名类声明.
类实例创建表达式的位置
ClassInstanceCreationExpression:
    new TypeArgumentsopt TypeDeclSpecifier TypeArgumentsOrDiamondopt
                                                            ( ArgumentListopt ) ClassBodyopt
    Primary . new TypeArgumentsopt Identifier TypeArgumentsOrDiamondopt
                                                            ( ArgumentListopt ) ClassBodyopt
TypeArgumentsOrDiamond:
    TypeArguments
    <> 
ArgumentList:
    Expression
    ArgumentList , Expression
所以,不,Java语言规范不允许任何快捷方式使您的匿名类实现比您要子类型的类型更多的接口.
因此,要确定匿名类的类型
如果类实例创建表达式在类主体中结束,则实例化的类是匿名类.然后:
- 如果T表示接口,则声明实现由T命名的接口的Object的匿名直接子类.
[...]
- 设T是标识符和任何类型参数命名的类型.声明了由T命名的类的匿名直接子类.子类的主体是类实例创建表达式中给出的ClassBody.
您可以选择其他方法.
您也可以使用本地课程.
| 归档时间: | 
 | 
| 查看次数: | 529 次 | 
| 最近记录: |