Java中的对象初始化 - 术语

时间:2015-11-06 18:48:30

标签: java

我遇到了this博客,他们使用了术语匿名对象实例化

它真的是一个“官方术语”吗?

在任何情况下,这种代码的官方术语是什么:调用方法而不显式创建具有其名称的对象,如本例所示 (更新:我指的是明确给对象没有明确创建对象的名称) :

public class Predictions3Client {
    public static void main(String[]  args) {
        new Predictions3Client().demo();
    }

    private void demo() {
        Localhost_Predictions3ResourcesP.Root root = Localhost_Predictions3ResourcesP.root();
        Localhost_Predictions3ResourcesP.Root.Xml xmlGetter = root.xml();
        String xml = xmlGetter.getAsXml(String.class); 
        System.out.println("The raw XML:\n" + xml);   
    }
}
new Predictions3Client().demo();

VS

Predictions3Client p3c = new Predictions3Client ();
p3c.demo();

我不认为这是“方法链接”或“Fluent界面”,因为它与对象相关而非方法相关。

1 个答案:

答案 0 :(得分:0)

在Java中匿名对象是没有类名或具有抽象类名的对象。简而言之,您必须填写“缺失”方法来构建类,并且那些“缺失”方法不依赖于类名。

   Runnable runnable = new Runnable() {
      public void run() {
         System.out.println("Hi, I'm anonymous!");
      }
   }

就是一个例子。如果它是一个完全命名的类,它看起来像

 public class HelloRunnable implements Runnable {
      public void run() {
         System.out.println("Hi, I'm not anonymous, I'm a HelloRunnable!");
      }
 }

请注意,仍然构造匿名类,但它们是使用缺少的方法作为参数构造的(它们是在花括号之间提供的)。所以,从技术上讲,你仍在“创建”一个类,你仍然在“创建一个类的实例”,但该类没有单一的,唯一可识别的类名。

因此,“匿名对象实例化”我将用更简单的短语“匿名对象创建”来引用

请记住,第一个示例的类名称没有正确地称为“Runnable”类,因为并非所有runnable都会打印出“嗨,我是匿名的”,如下例所示。

   Runnable runnable = new Runnable() {
      public void run() {
         System.out.println("Hi, I'm anonymous!");
      }
   }
   runnable = new Runnable() {
      public void run() {
         System.out.println("Hi, I'm anonymous's cousin!");
      }
   }

但是,在上面的例子中,将这两个类称为Runnable是合适的,因为它们都实现了runnable接口。