当前位置: 首页 > 面试题库 >

需要Java变量参数列表中的至少一个元素

松阳泽
2023-03-14
问题内容

在此代码构造中:

public MyClass(Integer... numbers) {
    do_something_with(numbers[]);
}

是否可以要求numbers至少包含一个这样的条目,以便在编译时检查?(当然,在运行时,我只能检查numbers.length。)

显然,我可以这样做:

public MyClass(Integer number, Integer... more_numbers) {
    do_something_with(number, more_numbers[]);
}

但这不会很优雅。

我这样做的原因是要确保子类不会根本不忘记调用此构造函数,默认情况下,该构造函数将调用super()列表中没有数字的。在这种情况下,我想获得熟悉的错误消息:Implicit super constructor is undefined. Must explicitly invoke another constructor

是否可以有另一种方法来实现相同的目标,例如将此构造函数标记为非隐式的@注释?


问题答案:

我想一种难以置信的怪异方法是创建一个无参数方法并将其标记为已弃用。然后使用以下两个标志进行编译:-Xlint:deprecation -Werror。这将导致任何不赞成使用的方法的使用都是编译时错误。

编辑(最初答案后很长时间):

较不客气的解决方案是抛弃MyClass(Integer... numbers)构造函数并替换为MyClass(Integer[] numbers)(并添加私有的无参数构造函数)。它使编译器无法隐式使用超类构造函数,但没有任何参数,并为您提供了编译时错误消息。

./some_package/Child.java:7: error: constructor Parent in class Parent cannot be applied to given types;
    public Child(Integer[] args) {
                                 ^
  required: Integer[]
  found: no arguments
  reason: actual and formal argument lists differ in length

代价是您的调用语法将变得更加冗长:

new Child(new Integer[] {1, 2, 3});

当然,您可以编写一个辅助函数来帮助解决此问题。

public static Child newInstance(Integer... numbers) {
    return new Child(numbers);
}

@SafeVarargs
public static <T> T[] array(T... items) {
    return items;
}

然后:

Child c0 = Child.newInstance(1, 2, 3);
Child c1 = new Child(array(1, 2, 3));


 类似资料:
  • 问题内容: 每次运行此php时,我都会不断收到相同的3个错误。我不知道我在做什么错,有人可以帮忙吗? 错误如下: [2014年5月5日19:20:50美国/芝加哥] PHP警告:mysqli_query()至少需要2个参数,第10行的/home/sagginev/public_html/Nutrifitness/search.php中提供了1个参数 [2014年5月5日19:20:50美国/芝加哥

  • 我使用的是OpenAPI3,有两个查询参数,其中至少有一个是必需的,但哪个并不重要。 这在OpenAPI3中可能吗?就我所见,规范和JSON模式规范中都没有提到它。

  • 这里有一个问题:我想保护URI,直到获得第三方OAuth2的授权。基于http://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/config/annotation/web/configuration/EnableOAuth2Client.html,我有以下内容: 而且 最后 但这给

  • 我试图使用Angularjs验证来在列表中至少有一个输入被填写时启用按钮。我所做的工作类似于下面的w3schools示例: 用角验证做这件事的最好方法是什么?

  • 所以我有两个函数都有相似的参数 现在,调用,但我如何在不修改的情况下传递变量参数列表中的变量(因为这在其他地方也已经使用了)。

  • Spring Data JPA是否提供查询关键字来检查列表中包含的至少一个项目是否与另一个列表中包含的至少一个项目匹配。 这是我的查询: (*** 应该是我正在寻找的关键字。例如:包含,在,...但是我不知道哪个是正确的。) 更多信息:这是我的活动实体。 我想检索每个hashtag与列表中至少一个hashtag匹配的活动。 例如:给定数据库中包含的活动: 如果我提供以下标签列表: 我应该收到: 我