gpt4 book ai didi

java - Android & Java 内部类概念

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:27 26 4
gpt4 key购买 nike

我点击了链接 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com