当前位置: 首页 > 知识库问答 >
问题:

(Java)我可以创建一个对象并在同一行上使用setter吗?

穆乐逸
2023-03-14

可以用JAVA创建一个对象,然后立即在同一行上使用setter吗?

如下所示:classname=newclass()。设置某物(“字符串”);

我如何才能正确地执行此操作,eclipse总是说:

类型不匹配:无法从空转换到类类型

共有2个答案

赫连子石
2023-03-14

您可以像@Jens所说的那样,使用构建器模式进行类似的操作。

public class Car {

   private String brand;

   public Car(String brand) {
      this.brand = brand;
   }

   public static class Builder {

      private String brand;

      public static Builder withBrand(String newBrand) {
         Builder builder = new Builder();
         builder.brand = newBrand;        
         return builder;
      }

      public static Car build() {
         return new Car(this.brand);
      }
   }
}

所以你可以这样叫新车:

Car evoque = new Car.Builder().withBrand("Range Rover").build();

当您有许多属性需要设置,并且不需要大量构造函数时,构建器模式非常有用。

卫增
2023-03-14

你得到的错误仅仅是因为set某物()的返回值是无效。方法是这样的;

public void setSomething(String something){
    this.something = something;
}

因为void不能分配给任何对象,所以不能内联创建对象并对其调用方法。但在将签名更改为以下内容时仍然有可能:

class MyClass{
    private String something;

    public MyClass setSomething(String something){
        this.something = something;
        return this; // returning this
    }
}

使用返回this称为方法链接,主要可以在构建器模式中看到。

虽然上述方法可能有效,但在创建MyClass的实例时,您可能希望始终将某物设置为值。为此,您必须添加一个自定义构造函数,它接受某物的初始值。例如:

class MyClass{

    private final String something;

    public MyClass(String something){
        this.something = something;
    }
}

然后可以像下面这样使用:

MyClass myclass = new MyClass("Something");

后者优于前者。因为这样创建的对象具有值集,不能处于无效状态。(例如,当没有设置东西时,这可能会导致令人讨厌的NullPointerExc0019s)。

注意:您可能已经看到,我在声明变量something时使用了关键字final。如果您希望以后能够将某些内容更改为不同的值,则可以省略此选项,但如果您保持原样,则创建了一个不可变的MyClass实例,该实例通常优于可变实例。

 类似资料:
  • 通常,我会这样做: 然而,有没有一种简单的方法可以做到这一点?基本上,类似于:<代码>(窗口)父级。dispose() 还是我总是需要创建一个窗口来存储我的演员?

  • 从文档中可以看出,这在spring-boot-maven-plugin中是不可能的。 所以现在我正在尝试创建一个测试JAR,但是当我运行应用程序类时,我得到了 有没有关于如何在没有maven插件的情况下打包SpringBoot应用程序的文档?

  • 我可以创建一个协议在不同的主机名上运行吗?我一直在使用协议规则,并保持主机名为localhost。但现在我正在尝试为一个不能在localhost上运行的应用程序创建一个协议。 @rule public PactProviderRule provider=new PactProviderRule(“ServiceNowClientrestClientProvider”,“localhost”,808

  • 问题内容: 我想做的是这样的: 不必这样做: 在我的具体情况下,结果对我而言实际上并不重要。但是,有办法吗? 问题答案: 您要求的功能可从PHP 5.4获得。这是PHP 5.4的新功能列表: http://php.net/manual/zh/migration54.new- features.php 以及新功能列表中的相关部分: 添加了对实例化的类成员访问, 例如(new Foo)- > bar(

  • 我有一个名为Card的类,我有一个for循环: 我想做的是基于for循环创建新实例。例如,我希望名字是card1、card2、card3等等。数字来自for循环。 我试过这个,但似乎不起作用: 谁能告诉我我做错了什么吗? 谢谢 所以我正在使用气垫船充满鳗鱼的解决方案,但我还有另一个问题。 我用的是卡片列表。添加(新卡()),当我尝试使用Card(I)设置名称时,java不允许我这么做。在没有i的情

  • 我使用RxJava(聚合服务)编写了一个Spring Boot微服务来实现以下简化用例。大局是当讲师上传课程内容文档时,应该生成并保存一组问题。 用户将文档上载到系统 当用户上载文档时,会从中创建许多问题(可能有数百个左右)。这里的问题是,我正在按顺序发布一个问题,以便CRUD服务保存它们。由于IO密集型网络调用,这会大大降低操作速度,因此完成整个过程大约需要20秒。以下是当前代码,假设所有问题都