final transient在Java中进行序列化后,是否可以将字段设置为任何非默认值?我的用例是一个缓存变量 - 这就是它的原因transient.我也习惯于制作Map不会改变的字段(即地图的内容被改变,但是对象本身保持不变)final.但是,这些属性似乎是矛盾的 - 虽然编译器允许这样的组合,但我不能将字段设置为除了反null序列化之外的任何东西.
我尝试了以下内容,没有成功:
readObject()- 因为字段是,所以无法完成final.在该示例cache中public仅用于测试.
import java.io.*;
import java.util.*;
public class test
{
public static void main (String[] args) throws Exception
{
X x = new X ();
System.out.println (x + " " + x.cache);
ByteArrayOutputStream buffer = new ByteArrayOutputStream ();
new ObjectOutputStream (buffer).writeObject (x);
x = (X) new ObjectInputStream (new ByteArrayInputStream (buffer.toByteArray ())).readObject ();
System.out.println …Run Code Online (Sandbox Code Playgroud) 在C中,标准内存处理函数是malloc(),realloc()和free().但是,C++ stdlib分配器只兼容其中两个:没有重新分配功能.当然,不可能完全相同realloc(),因为简单地复制内存不适合非聚合类型.但是,这个函数是否会出现问题:
bool reallocate (pointer ptr, size_type num_now, size_type num_requested);
Run Code Online (Sandbox Code Playgroud)
哪里
ptr先前为num_now对象分配了相同的分配器;num_requested> = num_now;和语义如下:
ptr从给定num_now对象的大小扩展给定的内存块num_requested,它会这样做(留下额外的内存未初始化)并返回true;false.当然,这不是很简单,但据我所知,分配器主要用于容器和容器的代码通常很复杂.
给定这样的函数,std::vector比如说,可以增长如下(伪代码):
if (allocator.reallocate (buffer, capacity, new_capacity))
capacity = new_capacity; // That's all we need to do
else
... // Do the standard reallocation by using a different buffer,
// copying data and freeing the current one …Run Code Online (Sandbox Code Playgroud) 使用以下代码:
try {
throw new RuntimeException ("main");
}
finally {
throw new RuntimeException ("finally");
}
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
Exception in thread "main" java.lang.RuntimeException: finally
at test.main(test.java:12)
Run Code Online (Sandbox Code Playgroud)
但是,通过在Java 7中添加抑制的异常,当finally块本身因异常而失败时,语言将原始"主"异常注册为抑制是不合逻辑的?目前我必须手动模拟这个:
try {
throw new RuntimeException ("main");
}
catch (RuntimeException exception) {
try {
throw new RuntimeException ("finally");
}
catch (RuntimeException exception2) {
exception2.addSuppressed (exception);
throw exception2;
}
}
Run Code Online (Sandbox Code Playgroud)
获得更多有用的(用于了解正在发生的事情)结果:
Exception in thread "main" java.lang.RuntimeException: finally
at test.main(test.java:13)
Suppressed: java.lang.RuntimeException: main
at test.main(test.java:9)
Run Code Online (Sandbox Code Playgroud)
编辑:澄清我在想什么.目前的Java版本是8,抑制异常不是一个全新的功能.但try..finally仍然没有包含它们.有什么东西阻止这种情况发生吗?
默认情况下,WebLogic在15分钟(600秒)后杀死卡住的线程,这由StuckThreadMaxTime参数控制.但是,我找不到关于如何定义"卡住"的更多细节.特别:
wait()的方法?别的什么?我的用例是通过权限系统下载大文件.由于用户需要进行身份验证并具有查看文件的权限,因此我无法(或至少不知道如何)将其留给简单的HTTP服务器,例如Apache.而且由于文件可能很大,下载(至少在理论上)可能需要超过15分钟.
我想知道为什么这段代码不会以无休止的递归结束.我想这与静态成员自动初始化为默认值有关,但是有人可以"一步一步地"告诉我'a'如何获得2的值和'b'的1?
public class A
{
public static int a = B.b + 1;
}
public class B
{
public static int b = A.a + 1;
}
static void Main(string[] args)
{
Console.WriteLine("A.a={0}, B.b={1}", A.a, B.b); //A.a=2, B.b=1
Console.Read();
}
Run Code Online (Sandbox Code Playgroud) 在关于迭代器的另一个问题之后,我对自定义容器有一些疑问.在我的容器中,iterator是一个子类const_iterator,所以我从非const转换为const"免费".但这是允许的,还是有这样的设置有任何缺点或非工作方案?
在我的应用程序中,我遇到一个问题,当类中的getter仅在接口中默认(Java 8特性)时,结果没有Java Beans属性.即正常方法调用它只是作为一种标准方法,但对于通过"属性"访问它突然表现不同......
这是一个测试用例:
import java.beans.Introspector;
import java.util.Arrays;
import java.util.stream.Collectors;
import org.apache.commons.beanutils.PropertyUtils;
public class test
{
public static void main (String[] arguments) throws Exception
{
// Normal language-level invocation, works fine.
System.out.println (new Bean1 ().getFoo ());
System.out.println (new Bean2 ().getFoo ());
// Printing Java Beans properties; Bean2 doesn't have 'foo' property...
System.out.println (Arrays.stream (Introspector.getBeanInfo (Bean1.class).getPropertyDescriptors ())
.map ((property) -> property.getName ())
.collect (Collectors.joining (", ")));
System.out.println (Arrays.stream (Introspector.getBeanInfo (Bean2.class).getPropertyDescriptors ())
.map ((property) -> property.getName ())
.collect (Collectors.joining (", ")));
// …Run Code Online (Sandbox Code Playgroud) 假设我有一些模板类,具体取决于类型T. T可能是几乎所有的东西:int,int*,pair <int, int>或struct lol; 它不能void,参考或任何cv资格但是.对于某些优化,我需要知道我是否可以继承T.所以,我需要一些特质类型is_subclassable,确定为基本特征的逻辑组合或通过一些SFINAE技巧.
在原始示例中,int并且int*不是子类,pair <int, int>而且struct lol是.
编辑:正如下面指出的litb,工会也不是可子类化的,T也可以是联合类型.
如何编写我需要的特征类型?
默认情况下,方法的默认外观".ToString()"默认为黑色.我想让它成为一种不同的颜色,但我没有看到任何特别引用此选项的选项.
我记得有几位前同事在几年前向我展示了他的VS IDE,他设置了这种方式,但我不记得他做了什么.
有没有人对如何做到这一点有任何想法?
实际情况是这样的:Java Web服务器(Weblogic)接收来自用户的请求,它必须发送ZIP存档作为响应.存档必须从用户要求的一些文件和服务器本身生成的一个HTML报告动态生成.我想重用服务器已经在其他情况下使用的JSF servlet来生成此报告.所以,基本上,我使用的是:
HttpURLConnection self = new URL ("http://me.myself.com/report.jsf?...").openConnection ();
String report_html = fetchHtmlFromConnection (self);
Run Code Online (Sandbox Code Playgroud)
然后创建所请求的ZIP,包括生成的HTML.
问题是,我可以以某种方式避免report.jsf在这种情况下发出内部HTTP请求(to )吗?这涉及到基本上没有意义(因为应用程序只是"自言自语")通过操作系统往返,HTTPD(可能在不同的机器上),等等.
java ×4
c++ ×3
weblogic ×2
c# ×1
casting ×1
colors ×1
containers ×1
final ×1
formatting ×1
iterator ×1
java-8 ×1
java-ee ×1
javabeans ×1
methods ×1
realloc ×1
try-finally ×1
type-traits ×1
webserver ×1