小编jju*_*uma的帖子

你期望不可变列表的不变性有多深?

如果你有一个不可变列表,你希望它总是在你要求的时候返回对同一个对象的引用

list.get(0)
Run Code Online (Sandbox Code Playgroud)

我的问题是,您是否希望能够改变对象并在下次从列表中获取突变时反映出变异?

c# java collections immutability

6
推荐指数
1
解决办法
713
查看次数

跟进:Java中没有枚举的实例控件

这是对这个问题的跟进.这个解决方案是否不漏水?

public final class Thing implements Serializable {

    private static final long serialVersionUID = 1L;

    private static final Thing[] instances = new Thing[2];
    private static int nextOrdinal = 0;

    public static final Thing instance0 = new Thing("whatever0");
    public static final Thing instance1 = new Thing("whatever1");

    private transient final String someState;

    public String someMethod() {return someState;}

    private final int ordinal;

    private Thing(String someState) {
        this.someState = someState;
        this.ordinal = nextOrdinal++;
        instances[this.ordinal] = this;
    }

    private Object readResolve() throws ObjectStreamException …
Run Code Online (Sandbox Code Playgroud)

java

6
推荐指数
1
解决办法
9062
查看次数

禁止在其包外部直接扩展Java类

我有一个包

public abstract class Player { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

还有这些

public abstract class GamePlayer extends Player { /*...*/ }
public abstract class TournamentPlayer extends Player { /*...*/ }
public abstract class StatelessPlayer extends Player { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

该软件包的用户需要玩家,但为了在不破坏它的情况下使用该软件包,我要求他们永远不要直接扩展播放器.相反,他们应该扩展提供的子类之一.

问题:我应该如何阻止用户直接扩展播放器?

我正在寻找一种能明显禁止这种禁令的方法.

java inheritance api-design

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

用现代的OO C语言做这个的好方法?

我有Tile一个代表游戏二维世界中瓷砖的东西.瓷砖的4面可以有任意数量的墙.我现在有这样的事情:

interface Tile {
    boolean isWallAtTop();
    boolean isWallAtRight();
    boolean isWallAtLeft();
    boolean isWallAtBottom();
}
Run Code Online (Sandbox Code Playgroud)

在其他地方我也有16个图像,每个图像可用于每个可能的图块墙配置.像这样的东西:

static final Image WALLS_ALL_AROUND = ...
static final Image WALL_ON_TOP_AND_RIGHT = ...
/* etc etc all 16 possibilities */
Run Code Online (Sandbox Code Playgroud)

我想写一个

static Image getWallImage(Tile tile)
Run Code Online (Sandbox Code Playgroud)

我想要避免的是经历诸如此类可能性的折磨

if (tile.isWallTop && tile.isWallRight 
    && !tile.isWallBottom && !tile.isWallLeft) {
    return WALL_ON_TOP_AND_RIGHT;
}
Run Code Online (Sandbox Code Playgroud)

有谁知道这样做的可行方法?

c# c++ java data-structures

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

我怎样才能知道这个Java API发生了什么变化?

在某些时候java.lang.Override开始可用于接口中声明的方法的实现.我很确定有一段时间它只适用于超类中定义的方法的覆盖.

我怎样才能知道这种变化发生的时间(即哪个版本)?

java

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

为了添加实例初始化块而创建的匿名类的意外后果

这是一个关于Java代码的问题,例如:

List<String> list = new ArrayList<String>() {{add("hello"); add("goodbye");}}
Run Code Online (Sandbox Code Playgroud)

程序员匿名扩展ArrayList只是为了在实例初始化块中推迟.

问题是:如果程序员的唯一目的只是达到以下目的:

List<String> list = new ArrayList<String>();
list.add("hello");
list.add("goodbye");    
Run Code Online (Sandbox Code Playgroud)

那么第一种方式做到这一点的意外后果是什么?

java anonymous-class

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

IE中的Tab键顺序问题,表单中的初始Javascript选择字段

我试图在html中实现以下行为:用户将看到一个涉及多个文本字段的表单.字段使用默认值填充,但在许多情况下,用户希望输入自己的字段.当页面加载时,第一个字段中的值被选中,因此用户可以通过简单地开始键入和标记到下一个字段来替换它,或者只是将其保留并标签输出.这是我所拥有的一个简单的例子:

<html>
    <body onload="document.getElementById('helloField').select()">
        <form>
            <input id="helloField" value="hello"/><br/>
            <input value="goodbye"/><br/>
            <input type="submit" value="Submit"/>
        </form>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这适用于Chrome(和我相信的Firefox,但我没有在这里).在IE中,该字段按预期选择,但是当用户点击选项卡时,浏览器会选中其地址栏而不是再见字段.如果我用简单的焦点替换选择,比如

<body onload="document.getElementById('helloField').focus()">
Run Code Online (Sandbox Code Playgroud)

标签在所有浏览器中都没问题,但这不是我想要的.我希望用户能够立即开始输入以替换默认值.

有人有主意吗?

谢谢.

html javascript browser internet-explorer cross-browser

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

使用散列查找浮点数数组的众数

我最近读到,涉及散列的方法可能是查找浮点数数组众数的好方法。我对哈希或其应用了解不多,文本也没有进一步解释。

有谁知道这个方法会涉及什么?

language-agnostic algorithm hash

2
推荐指数
1
解决办法
3377
查看次数

如何将对列表传递给Oracle存储过程?

我想写一个Oracle PL/SQL存储过程,它将一些其他类型的对列表作为参数varchar2(32).这可能吗?最好的方法是什么?

sql oracle plsql

2
推荐指数
1
解决办法
742
查看次数

如何通过一次OS调用获取python中目录的所有孙子

我想在Python中获取某个目录的所有孙子.出于性能原因,我不想继续在循环中调用OS函数(它是一个网络文件系统).这就是我现在所拥有的.有更简单的方法吗?

dirTree = os.walk(root)
children = [os.path.join(root, x) for x in dirTree.next()[1]]
grandChildren = []
for root, dirs, files in dirTree:
    if root in children:
        for dir in dirs:
            grandChildren.append(os.path.join(root, dir))
Run Code Online (Sandbox Code Playgroud)

编辑:我不清楚我对os.walk的调用是否是懒惰的.我的意图是整个树应该在我的电话后记忆中,但我不确定.

python

2
推荐指数
1
解决办法
449
查看次数

在哪种情况下,Java引用相等可能与未覆盖equals()的类型的对象的equals()相等?

是否有任何魔法悬挂在任何可能意味着的地方

(object0 == object1) != (object0.equals(object1))
Run Code Online (Sandbox Code Playgroud)

其中object0和object1都是某种类型,它没有覆盖Object.equals()?

java

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

我可以使用纯SQL在我的数据库(Oracle)中拥有一个互斥表吗?

我想在我的Oracle数据库中有一个表,其行作为锁.该表将有一列,一个varchar,我的客户端(基于JDBC的Java进程)将运行语句来获取和释放锁.

获取语​​句应该检查具有给定值的行的存在,如果不存在则插入.该语句应以某种方式向调用者发出信号,表明该行是否空闲.

release语句应该通过删除行来释放锁.

发布声明很简单,但我的获取声明应该是什么样的?

java sql oracle jdbc

0
推荐指数
1
解决办法
1685
查看次数