我是Java的新手,从Python和PHP,我习惯了函数参数的默认值.
所以我养成了编写方法的习惯,这些方法旨在从稍微不同的情况调用,你只想设置一些值.例如,在我的PHP代码中,这种情况很常见,因为我有工厂方法为对象实例提供稍微不同的属性.
在Java中,似乎我必须有一个方法需要所有参数,然后是几个重载的变量,这些变量将调用该方法,其中一些参数设置为默认值,一些参数由调用者提供.哪,好吧,好吧,但有时会让我紧张.
我记得在C++和ActionScript的一些简短的短途旅行中,这已经让我烦恼了.现在,更有经验的Java开发人员有这方面的一些捷径吗?
在我看来,从技术上讲,这个问题已被所有帖子的总和所回答为"是的,它是".我在下面打开了一个wiki帖子来收集各种替代解决方案,如果您愿意,请提供帮助.我发现所有这些都非常有用,可以作为典型Java构造的灵感和学习示例.
在下面的代码中,我希望第二种方法也是通用的,但是因为我在方法中创建了Calendar对象,因为类型擦除,我看不出如何.一种可能性是传递Calendar对象,但这会破坏完全使用此方法的主要目的(不必考虑Calendar对象).
如何使第二种方法适用于Calendar的多个子类,就像第一种方法一样?
public static <U extends Calendar> CalendarMatch<U> tpFromCalendar(U dt)
{
// we want to do all comparisons on UTC calendars
dt.setTimeZone(TimeZone.getTimeZone(DEFAULT_TZ_ID));
return new CalendarMatch<U>(dt);
}
public static CalendarMatch<GregorianCalendar> tpDailyGregorian(int h)
{
GregorianCalendar dt = new GregorianCalendar(TimeZone.getTimeZone(DEFAULT_TZ_ID));
dt.clear();
dt.set(Calendar.HOUR, h);
// this works because of type inference
return tpFromCalendar(dt);
}
Run Code Online (Sandbox Code Playgroud) 我想测试设计为在Mac上运行的软件,并且需要几个操作系统版本(旧版本)以及其他Mac软件来设置我的(虚拟)测试机器.
对于Windows上的相同方案,我可以使用TechNet或MSDN订阅提供的许可证.在ADC Mac开发中心,我找不到有关可用内容的任何具体信息.ADC会员资格是否让我下载软件/操作系统进行测试?如果没有,有什么可用?
对于二分图,您可以将邻接矩阵替换为所谓的biadjacency矩阵:
二部图的邻接矩阵A,其部分具有r和s顶点,具有形式
A = O B
BT O
其中B是r×s矩阵,O是全零矩阵.显然,矩阵B唯一地表示二分图,它通常被称为它的双邻性矩阵.
现在,DAG是一个二分图,例如,您可以在拓扑上对其进行排序,并使U和V集合分别是奇数或偶数拓扑级别的节点.
这意味着,对于具有n个节点的DAG,我只需要(n/2)2矩阵(平均)而不是2矩阵.问题是,我不知道如何构建它.任何提示?
我有一个应用程序可以通过各种方法和各种格式接收数据.我有可插拔的接收器,以某种方式获取数据(例如通过轮询邮箱,监听HTTP请求,监视目录的内容等),将其与MIME类型相关联,然后将其传递给包装如下:
public class Transmission {
private String origin; // where the data came from
private String destination; // where the data was sent to
private String mime; // the MIME type of the data
private BLOB data; // this is what I need an appropriate type for
}
Run Code Online (Sandbox Code Playgroud)
在线下,数据由专业处理程序根据mime字段的值进行处理.我期待像ZIP文件,Excel文档,SOAP,通用XML,纯文本等等.此时,代码应该与数据中的内容无关.这个data领域的适当类型是什么?Object?InputStream?Byte[]?
在项目属性中,在"Java编译器"部分中,有一些"JDK合规性"设置.我想将源兼容性设置为6,将.class文件的兼容性设置为5.这显然是不允许的:我收到消息"类文件兼容性必须大于或等于源兼容性".
这是Eclipse的限制还是Java版本兼容性的基本问题?有变通方法吗?
我想在开发和大多数目标中使用Java 6,但我想为某些目标(如Mac)生成Java 5兼容工件.我很好,如果这意味着有两个版本,只要它是相同的来源.
手册页说
如果给定进程在 64 位 VM 上运行,则可能需要指定 -J-d64 选项
就是这样。一些堆转储方法确实包括它,没有解释。
更具体地说,我想弄清楚是否不指定该选项可能会破坏我的堆转储(jhat 无法读取它们)。盲目试验成本高昂,因为堆很大,系统是实时的,并且在操作过程中我需要转储的特定点。
由于Wicket通过序列化我的页面中的组件自动管理会话状态,我想知道,在哪个级别我应该附加我的状态数据.更具体地说,似乎我遇到的错误是由WebApplication会话之间共享的对象引起的.
Page实例吗?我猜,第三个要点取决于对象的身份.Wicket使用什么来确定equals()(例如,它是否正在使用a Map)?
我附加到应用程序对象的数据是我在许多页面中需要的状态,因此我没有将它附加到页面对象.这是在Wicket中做到这一点的正确方法吗?
我不明白以下代码的输出:
public static void main(String[] args) {
int i1, i2, i3, i4;
byte b;
i1 = 128;
b = (byte) i1;
i2 = (int) b;
i3 = 0 | b;
i4 = 1 << 7;
System.out.format("i1: %d b: %d i2: %d i3: %d i4: %d\n", i1, b, i2, i3, i4);
}
Run Code Online (Sandbox Code Playgroud)
输出:
i1: 128 b: -128 i2: -128 i3: -128 i4: 128
Run Code Online (Sandbox Code Playgroud)
因为byte是一个8位二进制补码有符号整数,所以在最高有效位中带有1的二进制表示被解释为负值,这就是为什么b变成了-128,我完全没问题.我也明白,在施法时保持解释一致可能是一个好主意,如同i2.但是不应该i3并且i4具有相同的位模式,因此映射到相同的int值?
我定义了在pom.xml文件中编译,测试和运行程序的依赖项.但Eclipse仍然有一个单独配置的构建路径,因此每当我更改时,我都必须手动更新另一个.我想这是可以避免的?怎么样?