小编K M*_*Man的帖子

为什么 negate() 需要对 Predicate 进行显式转换?

我有一个名字列表。在第 3 行,我必须将 lambda 表达式的结果转换为Predicate<String>. 我正在阅读的书解释说,为了帮助编译器确定匹配的功能接口是什么,强制转换是必要的。

但是,我不需要在下一行进行这样的演员表,因为我不调用negate(). 这有何不同?我知道negate()这里返回了Predicate<String>,但是前面的 lambda 表达式不一样吗?

List<String> names = new ArrayList<>();
//add various names here
names.removeIf(((Predicate<String>) str -> str.length() <= 5).negate()); //cast required
names.removeIf(((str -> str.length() <= 5))); //compiles without cast
Run Code Online (Sandbox Code Playgroud)

java lambda predicate

7
推荐指数
1
解决办法
246
查看次数

即使子类已经具有定义的构造函数,父类是否总是需要默认或无参数的构造函数?

我无法编译此代码。

class Horse {
    private int age;
    Horse(int age) {
        this.age = age;
    }
}

class Pony extends Horse {
    private int age;
    Pony(int age) { //here compiler complains about no default constructor in parent class
        this.age = age;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道当父类只有带有参数的构造函数时,您必须为子类定义一个构造函数,这就是我所做的。但是,编译器抱怨父类没有默认构造函数。

我是否可以得出结论,父类始终需要默认构造函数或无参数构造函数?如果我希望父类和子类仅具有带参数的构造函数怎么办?

java parameters inheritance constructor default-constructor

6
推荐指数
1
解决办法
129
查看次数

什么会导致for循环在它应该递增时递减?

我写了一个计算方法来计算父亲多久以前和他儿子一样多的年龄,以及从现在开始多少年这是真的.出乎意料的是,对于一个8岁的父亲和一个3岁的儿子来说,它回归"2 - 2年前".同样出人意料的是,对于一个3岁的父亲和一个2岁的儿子,它将在"1年后回归".我并不担心如何改进代码,因为我已经知道如何做到这一点.相反,我很困惑为什么for循环计数器在它应该递增时似乎递减.

这是我的代码.

public class TwiceAsOld {

    public static void twiceAsOld (int currentFathersAge, int currentSonsAge) {

        int yearsAgo;
        int yearsFromNow;
        int pastFathersAge = currentFathersAge;
        int pastSonsAge = currentSonsAge;
        int futureFathersAge = currentFathersAge;
        int futureSonsAge = currentSonsAge;

        for (yearsAgo = 0; pastFathersAge != 2 * pastSonsAge; yearsAgo++) {
            pastFathersAge--;
            pastSonsAge--;
        }

        System.out.println("The father was last twice as old as the son " + yearsAgo + " years ago.");

        for (yearsFromNow = 0; futureFathersAge != 2 * futureSonsAge; yearsFromNow++) {
            futureFathersAge++; …
Run Code Online (Sandbox Code Playgroud)

java loops for-loop increment decrement

5
推荐指数
1
解决办法
99
查看次数

汉字太大,无法包含字符文字类型

我正在尝试分配汉字?作为 C++ 中的 char 值。在 Xcode 上,我收到错误消息:

“字符太大,无法包含字符文字类型。”

当我使用 JDoodle 或 Browxy 等在线 IDE 时,出现错误:

“多字符字符常量。”

无论我使用 char、char16_t、char32_t 还是 wchar_t,它都不起作用。我认为任何汉字至少都可以放入 wchar_t,但事实并非如此。我能做些什么不同的事情?

char letter = '?';
char16_t character = '?';
char32_t hanzi = '?';
wchar_t word = '?';
Run Code Online (Sandbox Code Playgroud)

c++ char non-ascii-characters

3
推荐指数
1
解决办法
1252
查看次数

Java 是否使用具有非 void 返回类型的 setter 方法打破了自己的规则?

我了解到标准约定是 setter 不返回任何内容。但是,NIO.2 API 有一些方法,如 setOwner、setLastModifiedTime 和 setAttribute,它们返回 Path 实例。这些方法不是真正的 setter,还是不是所有的 setter 都必须有 void 返回类型?

java setter nio

1
推荐指数
1
解决办法
140
查看次数

BigDecimal有多大可能导致POS程序出现内存问题?

我知道BigDecimal是表达货币的最准确方式,因为将货币值视为浮点数据类型往往会导致舍入错误.但是,我也明白BigDecimal计算需要更多内存.那就是说,使用BigDecimal而不是浮点数或双倍真的是处理货币价值的程序的最佳实践?如果我制作一个程序打印餐厅每个订单的逐项收据,如果我使用BigDecimal,或者如果我使用浮点值更可能会出现舍入错误,我是否更有可能耗尽内存?

(注意:"如何处理Java BigDecimal性能?"是一个稍微类似的问题,但我更关心的是相对简单的快餐交易中风险最小的选项.)

java floating-point double currency bigdecimal

0
推荐指数
1
解决办法
52
查看次数

为什么私有的getter方法违反了封装,但是缺少getter方法却没有呢?

我正在为OCP 8处理一些练习问题。

一个问题涉及一类具有私有字段和私有获取方法的类。正确的答案是该代码违反了封装,因为getter方法应该是公共的。

public class A {
    private String a;
    private String getA() { return a; }
}
Run Code Online (Sandbox Code Playgroud)

但是,另一个问题是具有私有字段且根本没有getter方法的类。正确的答案是该代码遵循封装原则。

public class A {
    private String a;
}
Run Code Online (Sandbox Code Playgroud)

假设所有数据字段都是私有的,那么大多数封装的顺序不应该至少是无获取方法,私有获取方法和公共获取方法吗?

我知道我的问题听起来可能是基于意见的,但考试却不是。

java getter encapsulation

0
推荐指数
1
解决办法
70
查看次数

内部类是否在java中作为组合关系工作?

内部类总是在外部类中.如果我们删除了外部类,那么内部类也将被销毁.我不关心内存释放,我只是在思考这个概念.这与构图的概念相同.在这种情况下,内部类必须是现实世界中对象的组合关系的示例.

简而言之,我如何将内在类与现实生活中的面向对象联系起来?通过这个,我的意思是一个非技术性的例子; 也许是与动物或电子游戏相关的隐喻?

如果构造函数是组合的一个很好的例子,那么在面向对象中涉及内部类的基本需求是什么?

以下示例是否准确?


例如

大学是外课.

教师是内在的阶级.


我确实理解面向对象,但我发现很难将内部阶级与现实世界联系起来.你能给我一些指示吗?

java class composition inner-classes

-2
推荐指数
2
解决办法
2944
查看次数