Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.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_Syntax - Fatal编程技术网

什么是类<&燃气轮机;用Java是什么意思?

什么是类<&燃气轮机;用Java是什么意思?,java,syntax,Java,Syntax,我的问题如上所述。抱歉,这可能是重复的,但我找不到结尾有的示例 为什么不直接使用Class作为参数?它是一个文本。这意味着您不知道这个类实例所代表的类的类型,但您仍然在使用泛型版本 如果你知道这个类,你会使用class。这样,您可以创建一个新实例,例如,无需强制转换:Foo-Foo=clazz.newInstance() 如果你根本不使用仿制药,你至少会得到一个警告(不使用仿制药通常是不被鼓励的,因为它可能导致难以检测的副作用) 这意味着一个类包含一种类型的任何东西(未知) 您应该阅读java

我的问题如上所述。抱歉,这可能是重复的,但我找不到结尾有
的示例

为什么不直接使用
Class
作为参数?

它是一个文本。这意味着您不知道这个
实例所代表的类的类型,但您仍然在使用泛型版本

  • 如果你知道这个类,你会使用
    class
    。这样,您可以创建一个新实例,例如,无需强制转换:
    Foo-Foo=clazz.newInstance()
  • 如果你根本不使用仿制药,你至少会得到一个警告(不使用仿制药通常是不被鼓励的,因为它可能导致难以检测的副作用)

    • 这意味着一个类包含一种类型的任何东西(未知)


      您应该阅读java泛型教程以更好地理解它

      这意味着您的类引用可以包含对任何类对象的引用

      它基本上与“类”相同,但您向阅读您的代码的其他人显示,您没有忘记泛型,您只需要一个可以容纳任何类对象的引用

      Bruce Eckel,用Java思考:

      在JavaSE5中,类优先于普通类,即使它们 是等价的,正如您所看到的,普通类不会产生 编译器警告。阶级的好处在于 指示您不仅仅是通过使用非特定类引用 意外,或出于无知。您选择了非特定版本


      Class
      是一个可参数化的类,因此可以使用语法
      Class
      ,其中
      T
      是一个类型。通过编写
      ,您正在声明一个
      对象,该对象可以是任何类型(
      是通配符)。
      Class
      类型是包含类的元信息的类型

      通过使用
      Class
      指定泛型类型来引用泛型类型始终是一种好的做法。您尊重这种做法(您知道
      Class
      是可参数化的),但您并没有将参数限制为具有特定类型

      关于泛型和通配符的参考:


      关于
      对象和反射(Java语言用于自我反省的特性)的参考资料:

      在泛型中,未知类型由通配符“?”表示。阅读官方示例。

      这是一头野兽。它通常会导致混淆和错误,因为当您第一次看到它时,就会开始相信,
      是任何java类型的通配符。那就是。。不是真的
      是未知类型的,是一个细微而严重的区别

      类一起使用时,这不是问题。这两行都可以工作和编译:

      Class anyType = String.class;
      Class <?> theUnknownType = String.class;
      
      Class anyType=String.Class;
      Class theUnknownType=String.Class;
      
      但是如果我们开始在集合中使用它,那么我们会看到奇怪的compiletime错误:

      List<?> list = new ArrayList<Object>();  // ArrayList<?> is not allowed
      list.add("a String");                    // doesn't compile ...
      
      List List=new ArrayList();//不允许使用ArrayList
      list.add(“字符串”);//不编译。。。
      

      我们的
      列表
      不是一个集合,它只适用于任何类型的对象。它只能存储一种类型:神秘的“未知类型”。这肯定不是一个真正的类型。

      这意味着,类引用类型可以包含表示任何类型的任何类对象。如果JVM加载一个类型,则表示该类型的类对象将出现在JVM中。我们可以从反射包中经常使用的类对象中获取关于类型的元数据

      假设您有一个名为“myPackage.MyClass”的类。假设它在类路径中,下面的语句是等价的

      Class<?> myClassObject = MyClass.class; //compile time check
      
      Class<?> myClassObject = Class.forname("myPackage.MyClass"); //only runtime check
      
      Class myClassObject=MyClass.Class//编译时检查
      类myClassObject=Class.forname(“myPackage.MyClass”)//仅运行时检查
      
      如果类引用也在方法参数中,则这种方法也会以类似的方式工作


      请注意,类“class”没有公共构造函数。因此,您不能用“new”操作符实例化“Class”实例。

      引用中说“Class优先于普通类”和“Class的优点”。blockquote似乎和尖括号不符。它需要转义。现在修复了它:只使用
      Class
      而不使用类型,这样做有什么好处?它们似乎代表着同样的东西。我认为泛型的全部要点是你事先不知道类的类型。否则,您只需定义一个函数来为参数使用特定的类类型。这个问号仍然没有意义。除了告诉编译器“我知道这是一个泛型类,但我不知道或不关心实际的类型,所以我没有给出具体的类型,而是给出了
      通配符。”。如果您不提供通配符,编译器会假定您忘记了类型或不知道该类是泛型的,并会就此向您发出警告。Kotlin与
      的等价物是什么?简单地
      不能传递给类型为
      的参数,因此
      在所有情况下都更方便。