小编Op *_*kel的帖子

PREF cookie(google.com)如何出现在Firefox中?

删除Firefox中的所有历史记录(删除所有cookie),禁用所有加载项和插件,然后重新启动Firefox.不要去任何地方等待大约10-15分钟.转到选项 - > ...->显示Cookie.您将在google.com域中看到名为PREF的 cookie . 1)有人可以解释这个cookie出现的方式和原因吗? 2)如何摆脱这个?

ps我没有安装任何谷歌桌面应用程序.Firefox google搜索栏也被删除了.

cookies firefox

24
推荐指数
3
解决办法
4万
查看次数

如何自定义Eclipse生成的hashCode()和equals()?

建议并且有时需要表示值(值类)的来覆盖hashCode(),equals()[和可选toString()]方法.这些方法返回的值取决于类及其超类的所有成员变量或子集.要正确地实现它们,你必须要了解一些关于散列和一点代数和集合理论的理论(不要太多,几乎所有的东西都在这些方法的javadocs和有效的Java形式Josh Bloch中解释.)
在在大多数情况下,此方法的实现遵循模板,IDE(如Eclipse JDT)包含生成它们的工具.但是,工具生成器无法做出任何假设,只使用语言和标准库中提供的构造生成这些方法.因为这些方法通常看起来非常难看.

实现这些方法的另一种方法是使用图书馆像Apache的(公共琅)HashCodeBuilder,EqualsBuilderToStringBuilder.使用这些实用程序,可以实现自己的hashCode()equals()方法,看起来好多了.

我的问题是关于这两种方法的结合.我希望能够自定义Eclipse hashCode()equals()生成器,以便使用HashCodeBuilder和朋友生成它们.如果不调整JDT,是否可以(以及如何)这样做?只编写将覆盖默认实现的小插件(但不更改JDT代码).

谢谢.

java eclipse hashcode eclipse-jdt

17
推荐指数
1
解决办法
9244
查看次数

为什么scala使用反射来调用结构类型的方法?

如果函数接受结构类型,则可以定义为:

def doTheThings(duck: { def walk; def quack }) { duck.quack }
Run Code Online (Sandbox Code Playgroud)

要么

type DuckType = { def walk; def quack  }
def doTheThings(duck: DuckType) { duck.quack }
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过以下方式使用该功能:

class Dog {
    def walk { println("Dog walk") }
    def quack { println("Dog quacks") }
}

def main(args: Array[String]) {
    doTheThings(new Dog);
}
Run Code Online (Sandbox Code Playgroud)

如果您为我的示例反编译(到Java)scalac生成的类,您可以看到该参数doTheThings是类型的Object,并且实现使用反射来调用参数上的方法(即duck.quack)

我的问题是为何反思?是不是可以只使用匿名和invokevirtual而不是反射?

下面是方法来翻译(执行)的结构型呼叫我的例子(Java语法,但问题是字节码):

class DuckyDogTest {
  interface DuckType {
    void walk();
    void quack();
  }

  static void doTheThing(DuckType d) {
    d.quack(); …
Run Code Online (Sandbox Code Playgroud)

scala structural-typing

16
推荐指数
2
解决办法
2591
查看次数

列出维护排序的实现

ListJava中是否存在基于提供的维护顺​​序的现有实现Comparator

可以通过以下方式使用的东西:

Comparator<T> cmp = new MyComparator<T>();
List<T> l = new OrderedList<T>(cmp);
l.add(someT);
Run Code Online (Sandbox Code Playgroud)

使得someT被插入,使得在列表中的顺序是根据保持cmp

(关于@andersoj的建议我正在完成我的问题,还有一个请求)

此外,我希望能够按排序顺序遍历列表而不删除元素,即:

T min = Const.SMALLEST_T;
for (T e: l) {
  assertTrue(cmp.compare(min, e) >= 0);
  min = e;
}
Run Code Online (Sandbox Code Playgroud)

应该通过.

欢迎所有的建议(除了告诉我Collections.sort在无序的完整列表中使用),但是,我更喜欢某些内容java.*或最终,org.apache.*因为此时很难引入新的库.

注意:(UPDATE4)我意识到这种列表的实现性能不足.有两种一般方法:

  1. 使用链接结构(种类)B树或类似物
  2. 使用数组和插入(使用二进制搜索)

没有1. CPU缓存未命中问题No 2.在数组中移位元素有问题.

UPDATE2: TreeSet不起作用,因为它使用提供的比较器(MyComparator)来检查是否相等,并基于它假设元素相等并排除它们.我需要那个比较器只用于排序,而不是"唯一性"过滤(因为元素按其自然顺序不相等)

UPDATE3: PriorityQueue不能正常工作List(因为我需要),因为没有办法按照"排序"的顺序遍历它,要按排序顺序获取元素,你必须从集合中删除它们.

更新:

类似的问题:
Java中Java 排序数组列表的良好排序列表

java collections list insertion-order

16
推荐指数
2
解决办法
5万
查看次数

具有复合键的地图的JSON表示

我想将以下(java)数据结构序列化为JSON:

class Machine {
  String name;
  Map<PartDescriptor, Part> parts;
}

class PartDescriptor {
  String group;
  String id;

  hashCode()
  equals()
}

class Part {
  String group;
  String id;
  String description;
  String compat;
  ...
  ...
}
Run Code Online (Sandbox Code Playgroud)

什么是JSON代表一个Machine

另外(可选),指向JSON到Java序列化器/反序列化器,它将支持您的表示

javascript java serialization json

13
推荐指数
3
解决办法
4万
查看次数

是否有可能以及如何在春季进行辅助注射?

在Guice 2或3中,存在所谓的辅助/部分注入.有了这个,Guice为我的对象合成工厂实现(实现我的接口),一些构造函数参数由Guice注入,一些是从上下文提供的.

是否有可能以及如何使用Spring做同样的事情?

java spring dependency-injection

12
推荐指数
1
解决办法
3010
查看次数

嵌套子资源属性覆盖行为的解决方法(自1.8.0开始)

我用以下方式使用apache ant:

我有项目P1,P2,P3.其中一些项目有模块,假设P2有M1,M2等.所有项目都有自己的ant构建脚本,并且所有项目都必须实现一组预定义目标(build,dist等),脚本需要一些属性在被叫时被定义.让我们说(build.dir.base)

这些模块遵循类似的结构,因此每个模块都有自己的构建文件来实现预定义的目标集,并期望设置一些属性.(比如build.dir.base - 和项目一样)

我还有一个构建所有项目(或子集)的全局ant脚本

在代码中看起来像:

集结all.xml:

<project name="x">
    <property name="build.dir.base" location="system.build.base" />
    <target name="build">
        <echo message="build.dir.base as defined for build-all.xml=${build.dir.base}" />
        <subant antfile="build.xml" target="build" inheritAll="false" inheritRefs="false">
            <dirset dir="${system.base}" includes="${project-list}" />
            <property name="build.dir.base" location="${build.dir.base}" />
        </subant>
    </target>
</project>
Run Code Online (Sandbox Code Playgroud)

build.xml(每个带有模块的项目一个,subant如果项目没有模块,则为no ):

<project name="y">
    <property name="build.dir" location="${basedir}/build" />
    <target name="build">
        <echo message="build.dir.base as defined for project=${build.dir.base}" />
        <subant antfile="build.xml" target="build" inheritAll="false" inheritRefs="false">
            <dirset dir="project.base" includes="${module-list}" />
            <property name="build.dir.base" location="${build.dir.base}/${name}" />
        </subant>
    </target>
</project>
Run Code Online (Sandbox Code Playgroud)

对于具有模块的项目:build.xml(用于模块):

<project name="z">
    <property name="build.dir.base" …
Run Code Online (Sandbox Code Playgroud)

ant

5
推荐指数
1
解决办法
2959
查看次数

设计ByteArrayOutputStream的公共接口的理由是什么?

在他们的公共API中有许多java标准和第三方库,有写入或读取的方法Stream.一个例子是javax.imageio.ImageIO.write()OutputStream处理过的图像的内容写入其中.另一个例子是iText pdf处理库,它将OutputStream生成的pdf写入其中.第三个例子是AmazonS3 Java API,InputStream它将读取它并在S3存储中创建文件.

当你想要结合其中两个时,问题就会出现问题.例如,我有一个图像BufferedImage,我必须用它ImageIO.write来推动结果OutputStream.但是,正如S3所要求的那样,没有直接的方法将其推送到Amazon S3 InputStream.
有很多方法可以解决这个问题,但这个问题的主题是使用ByteArrayOutputStream.

后面的想法ByteArrayOutputStream是使用一个包含在其中的中间字节数组,Input/Output Stream以便想要写入输出流的人将写入数组并且想要读取的人将读取数组.

我不知道为什么ByteArrayOutputStream不复制它就不允许任何对字节数组的访问,例如,提供一个InputStream可以直接访问它的字节数组.访问它的唯一方法是调用toByteArray(),它将复制内部数组(标准数组).这意味着,在我的图片示例中,我将在内存中拥有三个图像副本:

  • 首先是实际的BufferedImage,
  • 第二是内部arrayOutputStream
  • 第三是由toByteArray()我制作的副本,所以我可以创建 InputStream.

这个设计如何合理?

  • 隐藏实施?提供getInputStream(),实施保持隐藏.
  • 多线程?ByteArrayOutputStream不管怎样都不适合多线程访问,所以这不可能.

此外,ByteArrayOutputStreamApache的commons-io库(具有不同的内部实现)提供了第二种风格.但两者都具有完全相同的公共接口,无法在不复制的情况下访问字节数组.

java io object-design

4
推荐指数
1
解决办法
1118
查看次数

在数组中的参数时调用Method.invoke()

我有以下界面:

interface Foo {
  void bar(String a, int b);
}
Run Code Online (Sandbox Code Playgroud)

我想Foo.bar反思地调用(在Foo的实现上).但是,参数是在数组中,我不知道它的大小.

以下不起作用:

void gee(Foo someFoo, Method bar, Object[] args) {
  bar.invoke(someFoo, args);
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为args编译器将其作为单个参数进行威胁,并且数组不会"扩展"为vararg,而是在一个包含单个元素的数组中(内部)包装,即

@Test
public void varArgTest() {
  assertTrue(varArgFoo(new Object[] {1, 2}) == 1);
}

private static <T> int varArgFoo(T... arg) {
    return arg.length;
}
Run Code Online (Sandbox Code Playgroud)

我如何Method.invoke()在这种情况下调用,以便将数组作为vararg进行威胁?
或者更一般的问题:当参数在数组中时我如何调用vararg方法我不知道数组的大小直到运行时.

java reflection variadic-functions

3
推荐指数
1
解决办法
4039
查看次数