1
8
虽然Java支持重载,但所有参数都是按值传递的,即分配方法参数对调用方不可见。 从代码片段中,您试图返回不同类型的值。由于返回类型不是方法签名的一部分,因此不能使用不同的返回类型进行重载。因此,通常的方法是:
如果这实际上是一个转换,标准命名是
|
2
9
Java is always pass-by-value . 在Java中没有传递引用。 It's written in the specs ! |
3
5
在Java中,参数总是通过值传递。如果参数是引用类型,则通过值传递引用,您可以在方法内部对其进行修改,而对于基元类型,这是不可能的。 您将需要创建包装类型。 |
4
1
基元不由引用(或对象)传递,因此不能。
打印出1 |
5
1
Java中的基元类型的对象类型(double、整数、布尔等),如果我没记错的话,是不可变的。这意味着您不能更改传递给它们的方法中的原始值。 有两种解决办法。一种方法是创建一个保存值的包装器类型。如果您所要做的就是更改该值或从该值中获取计算结果,那么您可以让该方法为您返回结果。举个例子:
你可以通过以下方式给他们打电话:
或者类似的东西。这允许您对值进行变异或更改,并返回变异的值,这将允许如下操作:
希望有帮助。 |
6
1
我想说,如果你想使用原语,另一种策略就是做Java库所做的事情。把它吸干,有多种方法。
例如,objectinputstream具有
通过共享函数的实现,您没有获得任何东西,并且您的函数的客户机也没有获得任何东西,因为您的函数的变体都具有相同的名称。 更新 考虑到您的更新,我认为没有必要复制太多的代码。这取决于您的编码策略,但我想您可以这样做:
任何与代码共享更多的东西都可能是过度工程化的。 另一种选择可能是
也就是说,我认为让您的库的用户接触到原始类型本身以外的任何东西都没有意义。 如果你真的,真的很想这样做,那么你可以做一个单一的访问方法:
但我看不出这对你们图书馆的客户来说有多麻烦。 |
7
1
听起来您有一组要解析的位。您应该将它包装在一个对象中,让我们称该对象为位集。您正在对位进行迭代,因此您将拥有类似于迭代器的东西<bit>,并且在您进行时,您希望解析字节、整数、长等…对吗? 然后您将拥有类解析器,它上面有如下方法:
等。。。 因此,在调用了所需的任何方法之后,您已经以类型安全的方式提取了所需的值(不同方法的返回类型不同),并且迭代器已经根据类型向前移动了正确的位置数。 这就是你要找的吗? |
8
0
只有通过创建自己的价值持有类型。 |
9
0
是的,请更具体地说明你想要达到的目标。 从你的描述中,我建议你看看Java泛型,在那里你可以写出这样的东西:
|
Estus Flask · 符号字符串强制 7 年前 |
banan3'14 · Lambda作为Java中带有参数和原语的方法 7 年前 |
Leo Lai · std::map中的基元类型值是否已初始化? 8 年前 |
Lincoln Marr · 如何在java中将双精度数分割为整数? 8 年前 |