Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在非导入类上操作_Java_Javafx_Import - Fatal编程技术网

Java 在非导入类上操作

Java 在非导入类上操作,java,javafx,import,Java,Javafx,Import,我的问题是,我们如何在Java中对程序中未导入的类的对象进行操作?下面是我的JavaFX应用程序的一个示例: for(String item: participantsLabel.getItems()) 这是我的for循环,其中participantsLabel是ListView类的一个对象(只是某种表,我们可以在其中存储元素)。方法getItems()返回包含在participantsLabel对象中的元素的列表(特别是ObservableList对象,它是list类的子类)。所以重点是-程

我的问题是,我们如何在Java中对程序中未导入的类的对象进行操作?下面是我的JavaFX应用程序的一个示例:

for(String item: participantsLabel.getItems())
这是我的for循环,其中
participantsLabel
是ListView类的一个对象(只是某种表,我们可以在其中存储元素)。方法
getItems()
返回包含在
participantsLabel
对象中的元素的列表(特别是ObservableList对象,它是list类的子类)。所以重点是-程序看不到任何错误-我们可以轻松地在列表上操作,而无需导入列表类。但当我们想将此对象分配给某个变量时,例如,通过创建:

ObservableList ourList = participantsLabel.getItems();

编译器向我们显示了一个错误-我们必须导入一个ObservedList类。有人能解释一下,我们如何在for循环中解释列表,而不导入其返回类型吗?

在方法调用返回的值中,从方法的(
getItems()
)签名可以清楚地看出编译器应该使用哪个类


相反,当使用(非完全限定)符号时,需要导入它。或者将其更改为完全限定-然后编译器再次准确地知道要使用什么,而无需导入

编译器中的总是将完全限定的类名写入它输出的字节码。导入只是一种语法糖,它允许您在不使用包名的情况下使用类名,而不是完全限定名

仅当您在代码中声明某一类型的变量、在强制转换中使用该变量或使用它访问
静态
成员或构造函数时,才需要导入。其他类型不需要导入,因为编译器能够根据所涉及类的声明/签名来确定表达式的类型

在类文件上使用
javap
应该可以提供一些关于编译结果的见解:

源代码
javap-v SimpleProgram.class
这是对
observeList.get
的调用。使用的方法存储在常量池中,由编译器确定,即使我们没有导入它。这只是编译器自动完成的事情

您可能会注意到,即使不需要导入的类型也会使用完全限定名:

   #9 = Class              #35            // java/lang/Object
  [...]
  #35 = Utf8               java/lang/Object
[...]
public class SimpleProgram
  [...]
  this_class: #8                          // SimpleProgram
  super_class: #9                         // java/lang/Object
  interfaces: 0, fields: 0, methods: 2, attributes: 1
Constant pool:
   #1 = Methodref          #9.#23         // java/lang/Object."<init>":()V
   #2 = Fieldref           #24.#25        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = Class              #26            // java/lang/String
   #4 = String             #27            // a
   #5 = Methodref          #28.#29        // javafx/collections/FXCollections.observableArrayList:([Ljava/lang/Object;)Ljavafx/collections/ObservableList;
   #6 = InterfaceMethodref #30.#31        // javafx/collections/ObservableList.get:(I)Ljava/lang/Object;
   #7 = Methodref          #32.#33        // java/io/PrintStream.println:(Ljava/lang/String;)V
   #8 = Class              #34            // SimpleProgram
   #9 = Class              #35            // java/lang/Object
  #10 = Utf8               <init>
  #11 = Utf8               ()V
  #12 = Utf8               Code
  #13 = Utf8               LineNumberTable
  #14 = Utf8               LocalVariableTable
  #15 = Utf8               this
  #16 = Utf8               LSimpleProgram;
  #17 = Utf8               main
  #18 = Utf8               ([Ljava/lang/String;)V
  #19 = Utf8               args
  #20 = Utf8               [Ljava/lang/String;
  #21 = Utf8               SourceFile
  #22 = Utf8               SimpleProgram.java
  #23 = NameAndType        #10:#11        // "<init>":()V
  #24 = Class              #36            // java/lang/System
  #25 = NameAndType        #37:#38        // out:Ljava/io/PrintStream;
  #26 = Utf8               java/lang/String
  #27 = Utf8               a
  #28 = Class              #39            // javafx/collections/FXCollections
  #29 = NameAndType        #40:#41        // observableArrayList:([Ljava/lang/Object;)Ljavafx/collections/ObservableList;
  #30 = Class              #42            // javafx/collections/ObservableList
  #31 = NameAndType        #43:#44        // get:(I)Ljava/lang/Object;
  #32 = Class              #45            // java/io/PrintStream
  #33 = NameAndType        #46:#47        // println:(Ljava/lang/String;)V
  #34 = Utf8               SimpleProgram
  #35 = Utf8               java/lang/Object
  #36 = Utf8               java/lang/System
  #37 = Utf8               out
  #38 = Utf8               Ljava/io/PrintStream;
  #39 = Utf8               javafx/collections/FXCollections
  #40 = Utf8               observableArrayList
  #41 = Utf8               ([Ljava/lang/Object;)Ljavafx/collections/ObservableList;
  #42 = Utf8               javafx/collections/ObservableList
  #43 = Utf8               get
  #44 = Utf8               (I)Ljava/lang/Object;
  #45 = Utf8               java/io/PrintStream
  #46 = Utf8               println
  #47 = Utf8               (Ljava/lang/String;)V
{
  public SimpleProgram();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return
      [...]
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   LSimpleProgram;

  public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=5, locals=1, args_size=1
         0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
         3: iconst_1
         4: anewarray     #3                  // class java/lang/String
         7: dup
         8: iconst_0
         9: ldc           #4                  // String a
        11: aastore
        12: invokestatic  #5                  // Method javafx/collections/FXCollections.observableArrayList:([Ljava/lang/Object;)Ljavafx/collections/ObservableList;
        15: iconst_0
        16: invokeinterface #6,  2            // InterfaceMethod javafx/collections/ObservableList.get:(I)Ljava/lang/Object;
        21: checkcast     #3                  // class java/lang/String
        24: invokevirtual #7                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
        27: return
      [...]
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      28     0  args   [Ljava/lang/String;
}
   #6 = InterfaceMethodref #30.#31        // javafx/collections/ObservableList.get:(I)Ljava/lang/Object;
  #30 = Class              #42            // javafx/collections/ObservableList
  #31 = NameAndType        #43:#44        // get:(I)Ljava/lang/Object;
[...]
  #41 = Utf8               ([Ljava/lang/Object;)Ljavafx/collections/ObservableList;
  #42 = Utf8               javafx/collections/ObservableList
[...]
16: invokeinterface #6,  2            // InterfaceMethod javafx/collections/ObservableList.get:(I)Ljava/lang/Object;
   #9 = Class              #35            // java/lang/Object
  [...]
  #35 = Utf8               java/lang/Object