小编Mat*_*t G的帖子

Java中有用的环境设置列表

如果有一个(可能是静态的)方法/字段的完整列表存储JVM的运行时信息,我一直想知道很长一段时间.一个不完整的示例列表:

  • System.out/System.in
  • System.currentTimeMillis的()
  • System.getProperty()
  • System.getConsole()
  • Runtime.freeMemory()
  • 等等

有没有人有链接或什么?

编辑:我没有那么愚蠢,没有检查系统和运行时的文档:P我只是想知道是否有其他类,其中存储类似的方法来确定您正在运行的机器的状态.

java environment static runtime

27
推荐指数
1
解决办法
3861
查看次数

使用generic来存储Java中的常用超类型

假设我有一个方法"mix",它采用两个可能不同类型的T和S列表,并返回一个包含两者元素的List.对于类型安全,我想指定返回的List是R类型,其中R是T和S共有的超类型.例如:

List<Number> foo = mix(
    Arrays.asList<Integer>(1, 2, 3),
    Arrays.asList<Double>(1.0, 2.0, 3.0)
);
Run Code Online (Sandbox Code Playgroud)

为了指定这个,我可以将方法声明为

static <R, T extends R, S extends R> List<R> mix(List<T> ts, List<S> ss)
Run Code Online (Sandbox Code Playgroud)

但是如果我想在类上创建mix一个实例方法而不是静态List2<T>呢?

<R, T extends R, S extends R> List<R> mix ...
Run Code Online (Sandbox Code Playgroud)

阴影<T>在实例上List2,所以没有好处.

<R, T extends S&T, S extends R> List<R> mix ...
Run Code Online (Sandbox Code Playgroud)

解决了阴影问题,但编译器不接受

<R super T, S extends R> List<R> mix ...
Run Code Online (Sandbox Code Playgroud)

被编译器拒绝,因为下限通配符不能存储在命名变量中(仅用于? super X表达式)

我可以将参数移动到类本身,例如List2<R, T extends R, S extends R>,但类型信息实际上没有业务存在于实例级别,因为它仅用于一个方法调用,并且您每次需要时都必须重新构建对象在不同的参数上调用该方法. …

java generics bounded-wildcard

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

如何在球拍中使用多个返回值执行任何操作?

似乎为了在Racket中使用多个返回值,我必须使用define-values或将它们收集到列表中(call-with-values (thunk (values-expr)) list).在后一种情况下,为什么有人会选择返回多个值而不是列表,如果只是必须将它们收集到列表中呢?此外,这些都非常冗长,并且难以适应大多数代码.我觉得我必须误解一些关于多重回报价值的基本信息.就此而言,如何编写接受多个返回值的过程?

racket

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

C++似乎违反了添加属性

在课堂上完成作业,我遇到了这个(请注意循环的条件)

// This one works.
for (int k = 0; k + negwords[j].length() < comments[i].length(); k++) {
    if (comments[i].substr(k, negwords[j].length()) == negwords[j]) {
        negativeScore++;
    }
}
//*/

/*/ This one doesn't: It fails with an out-of-bounds index.
for (int k = 0; k < comments[i].length() - negwords[j].length(); k++) {
    if (comments[i].substr(k, negwords[j].length()) == negwords[j]) {
        negativeScore++;
    }
}
//*/
Run Code Online (Sandbox Code Playgroud)

为什么第一个有效但第二个无效?它是关于操作顺序,bool强制到int,操作员关联性还是OBOE的东西?

c++

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

模板接受C++中的"任何东西"

我有一个简单的模板结构,将字符串与值相关联

template<typename T> struct Field
{
    std::string name; T self;
}
Run Code Online (Sandbox Code Playgroud)

我有一个函数,我想接受任何类型的1个或多个字段,而字段可能是不同类型的,所以我使用的是std::initializer_list因为C++,据我所知,缺少类型的可变参数,无法确定可变参数的大小,并且必须至少有一个其他参数来确定从哪里开始.

问题是我不知道如何告诉它接受可能属于不同类型的字段.在Java中,我只会使用foo(Field<?> bar, Field<?>... baz),但C++缺少类型化的可变参数和通配符.我唯一的另一个想法是制作类型的参数 std::initializer_list<Field<void*>>,但这似乎是一个糟糕的解决方案......有更好的方法吗?

c++ templates wildcard variadic c++11

7
推荐指数
2
解决办法
4759
查看次数

为什么我需要最终使用来关闭资源?

大多数时候,我唯一看到的块块就是这样的东西

FileInputStream f;
try{
    f= new FileInputStream("sample.txt");
    //something that uses f and sometimes throws an exception
}
catch(IOException ex){
    /* Handle it somehow */
}
finally{
    f.close();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果f的范围以封闭块结束,为什么我们需要在finally中关闭它?

java finally try-catch

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

Eclipse 格式化程序:注释/公共后换行?

IntelliJ 有一些这样的设施和选项。例如,我希望它的格式如下:

@Override public
void foo()
{  ...  }
Run Code Online (Sandbox Code Playgroud)

更好的是能够像这样缩进注释和可见性

    @Override public
void foo()
{ ... }
Run Code Online (Sandbox Code Playgroud)

但我不想贪心。

Eclipse 中是否存在这样的格式化选项?

eclipse formatting

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

关于在返回接口时返回更少/更多特定接口的OO最佳实践

这个标题有点棘手......当我编写一个界面时,通常最好的做法是尽可能地返回最具体的界面,或者至少?

例如,假设

interface List2<T> extends List<T>
{
    List<T> getRange(int startIndex, int endIndex);
}
Run Code Online (Sandbox Code Playgroud)

改变它会更好吗?

interface List2<T> extends List<T>
{
    List2<T> getRange(int startIndex, int endIndex);
}
Run Code Online (Sandbox Code Playgroud)

这样调用者可以调用getRange他们的结果,同时仍然以多态方式匹配List?

oop

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

使用下限通配符(Java)的"意外令牌"

我有类似的东西:

interface Foo<T> {
    //... lines [0,45]...

/*line 46*/ <R, X super T&R> List<X> weave(R value);
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是IntelliJ正在报道:

  1. 错误:(46,18)java:>预期
  2. 错误:(46,19)java:非法启动类型
  3. 错误:(46,26)java:'('预期
  4. 错误:(46,28)java:<identifier>预期
  5. 错误:(46,29)java:'l'预计
  6. 错误:(46,43)java:<identifier>预期

有什么问题?我不允许将名字绑定到下限吗?或者我只允许R&X在上限中使用表达式?

把它改成

interface Foo<T> {
    //... lines [0,45]...

/*line 46*/ <R> List<? super T&R> weave(R value);
    //...
}
Run Code Online (Sandbox Code Playgroud)

产量

  1. 错误(46,31)java:>预期
  2. 错误(46,32)java:'('预期
  3. 错误(46,33)java:非法启动类型

java generics syntax-error bounded-wildcard

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

Racket哈希表默认失败的结果无益

在Racket中,如果您尝试hash-ref使用哈希不包含的密钥,例如

(define a-hash #hash((1 . "a")
                     (2 . "b")))
(hash-ref a-hash 3)
Run Code Online (Sandbox Code Playgroud)

提出exn:fail:contract来了.

...\Racket\collect\racket\private\more-scheme.rkt:263:2:hash-ref:找不到密钥的值

不幸的是,exn:fail:contract无益广泛.如果您尝试将值应用为过程,则会获得相同类型的异常

(with-handlers ((exn:fail? print))
  (10 11))
Run Code Online (Sandbox Code Playgroud)

(exn:fail:contract"application:not a procedure; \n期望一个可以应用于参数的过程\n给定:10 \n参数......:\n 11"#)

有没有办法改变的默认值hash-reffailure-result使用它的代码么?我可以进入我的Racket安装并在那里进行更改吗?这看起来很糟糕和危险.我有什么选择?我可以解析异常消息,但是那些hacky和容易出错的东西.

racket

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

Java限制了通用协方差

由于在下面的代码中,R扩展了Appendable,我不应该能够返回一个可以预期R的Appendable吗?

/**
  * Produces an R, to which a T has been semantically appended,
  * whatever that may mean for the given type.
  */
interface Appendable <R, T>
{
    /**
     * Append is not expected to modify this Appendable,
     * but rather to return an R which is the result
     * of the append.
     */
    R append(T t);
}

interface PluralAppendable <R extends Appendable<R, T>, T>
    extends Appendable<R, T>
{
    default R append(T... els)
    {
        // Easier to debug than …
Run Code Online (Sandbox Code Playgroud)

java generics covariance java-8

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

在c ++中int到bool []

我想要做的是给出一个参数const int &i,i以数组的形式返回二进制表示的位bool(并且返回也会很棒)...有谁知道怎么做?

c++ int boolean

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