java - Android & Java 内部类概念

标签 java android inner-classes nested-class

我点击了链接 http://developer.android.com/reference/android/app/AlertDialog.html我尝试像这样创建新的 AlertDialog

AlertDialog myAlertDialog = new AlertDialog.Builder(MainActivity.this).create();

根据文档,AlerDialog 是外部类,而 Builder 是 AlertDialog 中的内部类。现在我在访问内部类时将相同的概念与 java 联系起来,就像这样/p>

package com.test;

    public class Outer {
        public void OuterMethod() {
            System.out.println("OuterMethod");
        }

        public static void main(String[] args) {
            Outer myOuter = new Outer();

            myOuter.OuterMethod();
            Outer myOuter2 = new Outer.Inner();//this piece of code gives error

        }

        class Inner {

            Inner() {
                System.out.println("constructor Inner");
            }

            public void InnerMethod() {
                System.out.println("Inside InnerMethod");
            }
        }
    }

所以我在这里的问题是如何理解 android 中相同的内部类概念并访问其中的方法

最佳答案

您已经创建了一个内部非静态类(一个内部实例类),而AlertDialog.Builder 是一个静态类。

要使您的代码正常工作,您需要 interesting way of invoking new是这样的:

Outer.Inner myOuter2 = myOuter.new Inner();

这是因为它的行为与 Outer 中的任何其他非静态字段非常相似 - 它需要 Outer 的实例才能有效。无论如何,这通常不是一个好主意,因为公共(public)内部非静态类很少见。

您更有可能希望 Inner 成为静态类,即声明为:

static class Inner {

本质上,这将 Inner 与其包含类分离,它恰好位于其中,因此可以通过 new Outer.Inner() 实例化。它可以愉快地作为一个公共(public)类独立存在于一个新的 .java 文件中。

当内部类只与外部类相关时,内部静态类很有用,它显示了它们之间的关系。

在 Android 的情况下,您仅在构建 AlertDialog 时使用 AlertDialog.Builder。如果它是一个被其他类使用的通用 Builder(例如一个普通的 Dialog),它会被声明为它自己的公共(public)类(即一个没有嵌套的独立类)在另一个里面)。

关于java - Android & Java 内部类概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17299100/

相关文章:

java - 仅获取 1 个随机行的值并将这些值设置为一个类

java - 具有固定宽度的 JTextPane 首选大小

android - 使用 scalatest + robolectric

javascript - 本地 HTML 文件与(读/写)本地 .xlsm Excel 文件通信的最佳方式

python - Numpy:类实例数组

java - 线程中的异常 "main"java.lang.IllegalArgumentException : bound must be positive

android - 之前添加的卡如何进行多次支付?

java - 如何对内部类中的方法进行单元测试?

java - 使用静态内部类时构建错误

java - Jersey Grizzly HTTP 服务器在容器 docker 内关闭