小编dou*_*lep的帖子

最终瞬态场和序列化

final transient在Java中进行序列化后,是否可以将字段设置为任何非默认值?我的用例是一个缓存变量 - 这就是它的原因transient.我也习惯于制作Map不会改变的字段(即地图的内容被改变,但是对象本身保持不变)final.但是,这些属性似乎是矛盾的 - 虽然编译器允许这样的组合,但我不能将字段设置为除了反null序列化之外的任何东西.

我尝试了以下内容,没有成功:

  • 简单字段初始化(在示例中显示):这是我通常所做的,但是在反序列化之后似乎没有发生初始化;
  • 在构造函数中初始化(我相信这在语义上与上面相同);
  • 分配字段readObject()- 因为字段是,所以无法完成final.

在该示例cachepublic仅用于测试.

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)

java serialization final

59
推荐指数
4
解决办法
2万
查看次数

为什么C++分配器中没有重新分配功能?

在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)

c++ memory-management realloc

33
推荐指数
3
解决办法
3829
查看次数

为什么try..finally阻止不将原始异常注册为抑制?

使用以下代码:

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仍然没有包含它们.有什么东西阻止这种情况发生吗?

java exception-handling try-finally

32
推荐指数
2
解决办法
1070
查看次数

WebLogic阻止了线程保护

默认情况下,WebLogic在15分钟(600秒)后杀死卡住的线程,这由StuckThreadMaxTime参数控制.但是,我找不到关于如何定义"卡住"的更多细节.特别:

  • 15分钟倒计时开始的重点是什么.请求处理开始?最后wait()的方法?别的什么?
  • 这仅适用于请求处理线程还是所有线程?也就是说,请求处理线程可以通过为长期任务生成工作线程来"逃避"这种保护吗?特别是,它可以在没有15分钟倒计时的情况下将响应写入这样的工作人员吗?

我的用例是通过权限系统下载大文件.由于用户需要进行身份验证并具有查看文件的权限,因此我无法(或至少不知道如何)将其留给简单的HTTP服务器,例如Apache.而且由于文件可能很大,下载(至少在理论上)可能需要超过15分钟.

weblogic java-ee weblogic-10.x

21
推荐指数
2
解决办法
3万
查看次数

C#两个类,静态成员互相引用

我想知道为什么这段代码不会以无休止的递归结束.我想这与静态成员自动初始化为默认值有关,但是有人可以"一步一步地"告诉我'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)

c# static-members

18
推荐指数
3
解决办法
696
查看次数

可以'iterator'类型只是子类'const_iterator'吗?

关于迭代器的另一个问题之后,我对自定义容器有一些疑问.在我的容器中,iterator是一个子类const_iterator,所以我从非const转换为const"免费".但这是允许的,还是有这样的设置有任何缺点或非工作方案?

c++ containers iterator casting

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

Java 8接口默认方法似乎没有声明属性

在我的应用程序中,我遇到一个问题,当类中的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)

java javabeans java-8 default-method

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

C++模板:如何确定类型是否适合子类化

假设我有一些模板类,具体取决于类型T. T可能是几乎所有的东西:int,int*,pair <int, int>struct lol; 它不能void,参考或任何cv资格但是.对于某些优化,我需要知道我是否可以继承T.所以,我需要一些特质类型is_subclassable,确定为基本特征的逻辑组合或通过一些SFINAE技巧.

在原始示例中,int并且int*不是子类,pair <int, int>而且struct lol是.

编辑:正如下面指出的litb,工会也不是可子类化的,T也可以是联合类型.

如何编写我需要的特征类型?

c++ type-traits template-meta-programming

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

Visual Studio格式 - 更改方法颜色

默认情况下,方法的默认外观".ToString()"默认为黑色.我想让它成为一种不同的颜色,但我没有看到任何特别引用此选项的选项.

我记得有几位前同事在几年前向我展示了他的VS IDE,他设置了这种方式,但我不记得他做了什么.

有没有人对如何做到这一点有任何想法?

methods formatting colors visual-studio

10
推荐指数
8
解决办法
2万
查看次数

如何避免从Java Web服务器向自身发送HTTP请求?

实际情况是这样的: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 webserver weblogic

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