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