据我了解,有几种方法(也许还有其他方法)Map在Java中创建一个浅表副本:
Map<String, Object> data = new HashMap<String, Object>();
Map<String, Object> shallowCopy;
// first way
shallowCopy = new HashMap<String, Object>(data);
// second way
shallowCopy = (Map<String, Object>) ((HashMap<String, Object>) data).clone();
Run Code Online (Sandbox Code Playgroud)
一种方式优于另一种方式,如果是这样,为什么?
值得一提的是,第二种方式是"Unchecked Cast"警告.所以你必须添加@SuppressWarnings("unchecked")以解决它,这有点刺激(见下文).
@SuppressWarnings("unchecked")
public Map<String, Object> getDataAsMap() {
// return a shallow copy of the data map
return (Map<String, Object>) ((HashMap<String, Object>) data).clone();
}
Run Code Online (Sandbox Code Playgroud) 在VB.NET中,使用&连接字符串而不是+?
例如
Dim x as String = "hello" + " there"
Run Code Online (Sandbox Code Playgroud)
与
Dim x as String = "hello" & " there"
Run Code Online (Sandbox Code Playgroud)
是的,我知道我想要使用很多字符串连接StringBuilder,但这更像是一个普遍的问题.
我正在尝试编写一个方法,使用反射在类中获取私有字段.
这是我的课程(本例简化):
public class SomeClass {
private int myField;
public SomeClass() {
myField = 42;
}
public static Object getInstanceField(Object instance, String fieldName) throws Throwable {
Field field = instance.getClass().getDeclaredField(fieldName);
return field.get(instance);
}
}
Run Code Online (Sandbox Code Playgroud)
所以说我这样做:
SomeClass c = new SomeClass();
Object val = SomeClass.getInstanceField(c, "myField");
Run Code Online (Sandbox Code Playgroud)
我得到的是IllegalAccessException因为myField是私人的.有没有办法使用反射获取/设置私有变量?(我在C#中完成了,但这是我第一次在Java中尝试过它).如果你想知道为什么需要做这样的疯狂:),这是因为有时在单元测试期间将私有变量设置为失败测试的伪值等是很方便的.
我发现Eclipse XML编辑器总是插入空格选项卡,即使您选中了"为选项卡插入空格"选项Window->Preferences->General->Editors->Text Editors.
您可以打开任何XML文件,然后执行CTRL-SHIFT-F格式化文件,您将看到此行为(所有空格都将替换为适当的选项卡).
我注意到Ganymede的这种行为,今天刚刚升级到Galileo并且希望它被修复,但它似乎是一样的.
这是一个错误,还是我做错了什么?
我有一个关于struts2值栈的问题.假设我有一个Action类RegisterAction,它有一个execute方法,如下所示:
public String execute() {
ValueStack stack = ActionContext.getContext().getValueStack();
stack.push(new String("test string"));
return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
我的struts.xml看起来像这样:
<struts>
<package name="default" extends="struts-default">
<action name="*Register" method="{1}" class="vaannila.RegisterAction">
<result name="populate">/register.jsp</result>
<result name="input">/register.jsp</result>
<result name="success">/success.jsp</result>
</action>
<action name="*Test" method="{1}" class="vaannila.TestAction">
<result name="test">/test.jsp</result>
<result name="success">/success2.jsp</result>
</action>
</package>
</struts>
Run Code Online (Sandbox Code Playgroud)
因此,在该类中执行execute方法后,控制将流向success.jsp.
我的问题是:
1)如何获得我在堆栈中推送的值success.jsp?
2)让我们说success.jsp我有一个<s:submit method="testMethod" />重定向到一个名为的动作类TestAction.换句话说,从Register页面,用户单击submit,并在我们的执行方法中RegisterAction推送堆栈上的"测试字符串".然后我们去success.jsp.该success.jsp有一个提交按钮,指导我们TestAction#testMethod.在TestAction#testMethod,我RegisterAction#execute仍然在堆栈上推送的值是什么?我怎么才能得到它?我逐步完成了eclipse调试器,但我没有看到它的价值.
谢谢.
根据JAVA文档,Connection#commit()可以抛出SQLException.我的问题是在这种情况下是否仍应发布回滚.
例如:
Connection con = null;
try {
// assume this method returns an opened connection with setAutoCommit(false)
con = createConnection();
// do DB stuff
con.commit();
} catch (SQLException e) {
if (con != null) {
// what if con.commit() failed, is this still necessary,
// will it hurt anything?
con.rollback();
}
} finally {
if (con != null) {
con.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上将con.rollback()调用包装到另一个方法中,该方法忽略了它抛出的任何异常,所以我想我在这里没问题.我只是想知道这是否是处理事情的最佳方式.
可能重复:
在一系列日期之间获取日期
假设我有2个日期(仅限日期部分,没有时间),我希望获得这两个日期之间的所有日期,并将它们插入表格中.有没有一种简单的方法来使用SQL语句(即没有循环)?
Ex:
Date1: 2010-12-01
Date2: 2010-12-04
Table should have following dates:
2010-12-01, 2010-12-02, 2010-12-03, 2010-12-04
Run Code Online (Sandbox Code Playgroud) 考虑一下这种方法(原谅Chuck Norris幽默的悲惨尝试:)):
public class ChuckNorrisException : Exception
{
public ChuckNorrisException()
{
}
public ChuckNorrisException(string message)
: base(message)
{
}
public ChuckNorrisException(string message, Exception cause)
: base(message, cause)
{
}
protected ChuckNorrisException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
static void ExceptionTest(double x)
{
try
{
double y = 10 / x;
Console.WriteLine("quotient = " + y);
}
catch (Exception e)
{
e = e is DivideByZeroException ? new ChuckNorrisException("Only Chuck Norris can divide by 0!", e) :
e; …Run Code Online (Sandbox Code Playgroud) 假设我有一个向量v,其中包含m个元素,以及一个名为i的向量的随机访问索引.
当我增加索引时,如果它超出范围,我想索引第一个(第零个)元素.类似地,当我递减索引时,如果索引<0,我想索引到最后一个元素.目前我只是在容器中移动一个元素,所以想出了这个函数:
unsigned int GetIndexModM(int index,unsigned int m) {return (index + m) % m;}
Run Code Online (Sandbox Code Playgroud)
呼叫站点可能如下所示:
std::vector<Whatever> v = ... // initialise with 5 elements
unsigned int i = 0;
unsigned int j = GetIndexModM(static_cast<int>(i) - 1,v.size()); // get preceeding index
Run Code Online (Sandbox Code Playgroud)
如果从索引中减去> m的值,则此函数将失败:
unsigned int j = GetIndexModM(static_cast<int>(i) - 17,v.size()); // oops: returns -2
Run Code Online (Sandbox Code Playgroud)
我的问题:什么是一个函数最优雅的实现,它接受任何整数并将其作为索引返回?
在C#中,我几乎总是using在处理流对象时使用该模式.例如:
using (Stream stream = new MemoryStream())
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
通过使用using块,我们确保在代码块执行后立即在流上调用dispose.
我知道Java没有等效的using关键字,但我的问题是,当使用像FileOutputStreamJava这样的对象时,我们是否需要做任何内务管理以确保它被处理掉?我正在看这个代码示例,我注意到他们没有做任何事情.
我只是想知道Java处理流的最佳实践是什么,或者它是否足以让垃圾收集器处理它.