当前位置: 首页 > 面试题库 >

Java局部类

黄成荫
2023-03-14
问题内容

小序言。我是1.4 jdk上的优秀Java开发人员。之后,我切换到另一个平台,但是在这里我遇到了问题,因此问题主要是关于jdk
1.6(或更高版本:))。我有3个耦合类,耦合的本质与本机方法有关。波纹管是这3类的例子

public interface A
{
     public void method();
}
final class AOperations
{
     static native method(. . .);
}
public class AImpl implements A
{
    @Override
    public void method(){ 
        AOperations.method( . . . );
    }
}

因此存在接口A,它由AOperations以本机方式实现,而AImpl仅将方法调用委托给本机方法。这些关系是自动生成的。一切都很好,但是我站在问题面前。有时像A这样的接口需要公开迭代器功能。我可以影响接口,但是不能更改实现(AImpl)。

在C#中说,我可以通过简单的部分解决问题:(C#示例)

partial class AImpl{
 ... //here comes auto generated code
}

partial class AImpl{
 ... //here comes MY implementation of 
 ... //Iterator 
}

因此,有部分或类似的Java模拟。

编辑
:根据@pgras的评论,我需要澄清一下。AImpl不是处于真空状态,有一些工厂(本机实现)返回AImpl的实例,这就是为什么从AImpl继承的创建不适用的原因。

编辑2 :也许它不相关,但是JUnit 4是如何完成的:

public class SomeTest {
 ...
 //there is no direct inheritance from Assert, but I can use follow:
 assertTrue(1==1); //HOW DOES it works??

问题答案:

Java不支持局部或开放类。其他JVM语言也可以,但是Java不可以。在您的示例中,最简单的事情可能是不幸的是使用委托。您可以让AImpl接受另一个对象,这些对象实现这些扩展方法的接口。然后,生成的AImpl将具有生成的方法(例如迭代器方法),可以将其委托给您传入的用户创建的对象



 类似资料:
  • 局部内部类是指在一个方法中定义的内部类。示例代码如下: 局部内部类有如下特点: 1)局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)和 static 修饰符修饰。 2)局部内部类只在当前方法中有效。 3)局部内部类中不能定义 static 成员。 4)局部内部类中还可以包含内部类,但是这些内部类也不能使用访问控制修饰符(public、priv

  • 问题内容: 我以为我了解了Java中局部变量和全局变量之间的区别,直到今天看到一个示例。在这段代码中,我们尝试将元素添加到方法的链接列表中: 我不明白的是,为什么在关闭方法后newElement不会消失?因为这是局部变量,并且未在任何地方的类中定义。这是此类的完整代码: } 先感谢您 问题答案: 这是 变量 和 对象的 混合,确实是局部变量,在方法结束后会丢失,但是引用指向一个 对象 。如果没有引

  • 本文向大家介绍Java中的局部变量,包括了Java中的局部变量的使用技巧和注意事项,需要的朋友参考一下 局部变量在方法,构造函数或块中声明。 输入方法,构造函数或块时将创建局部变量,并且一旦退出方法,构造函数或块,该变量将被销毁。 访问修饰符不能用于局部变量。 局部变量仅在声明的方法,构造函数或块内可见。 局部变量在内部在堆栈级别实现。 局部变量没有默认值,因此应声明局部变量,并应在首次使用前分配

  • 问题内容: 如何在我的匿名内部子类中获取传递给此方法的值? 我收到此错误: 无法在以其他方法定义的内部类中引用非最终变量userID 我很确定我不能将其赋值为final,因为它是一个未知值的变量。我听说这种语法确实以某种方式保留了作用域,所以我认为必须有一个我不太了解的语法技巧。 问题答案: 当然,您可以将其分配为final-只需将该关键字放入参数的声明中即可: 我不确定这是一个未知值的变量是什么

  • 问题内容: 我想使用a 对图进行拓扑排序。为简便起见,我想为比较器使用匿名内部类。但是,我需要访问该图才能确定我正在查看的节点的程度。这可能吗? 正确的代码 问题答案: 是的,使其最终化: 有关最终关键字,请参见最终词: 匿名本地课程 第二种情况涉及最终变量,实际上是语言语义所规定的。在这种情况下,除非声明为final,否则Java编译器将不允许您使用变量。这种情况出现在闭包(也称为匿名本地类)中

  • 问题内容: 嗨,我正在浏览有关内部类的SCJP书,发现了这一说法,类似这样。 方法本地类只能引用已标记的本地变量 在解释中,指定的原因与本地类对象和堆上的局部变量的范围和生存期有关,但我无法理解。我在这里想念任何东西吗? 问题答案: 原因是,在创建方法本地类实例时,编译器实际上会将其引用的所有方法本地变量复制到其中。这就是为什么只能访问变量的原因。甲变量或参考是不变的,所以它停留在同步与其方法本地