小编Kon*_*che的帖子

在C#中使用enum作为泛型类型参数

可能重复:
C#中的枚举类型约束

是否可以enum通过使用其包装类将类型用作通用参数Enum

我有不同的枚举:

enum errors1 { E1, E3, E8 };
enum errors2 { E0, E2, E9 };
enum errors3 { E7, E4, E5 };
Run Code Online (Sandbox Code Playgroud)

通过以下类声明,我认为我可以实现它:

public class MyErrors<T> where T : Enum
{
   T enumeration;

   public T getEnumeration()
   {
       return enumeration;
   }

   static void Main(string[] args)
   {

       Program<error1> p = new Program<error1>();
       p.getEnumeration().E1  // this call does NOT work
   }
Run Code Online (Sandbox Code Playgroud)

但是,由于一般类型是Enum我只能访问类的成员和方法Enum.那么我可以按照我的意图实现它,或者我应该使用其他方法吗?

c# generics enums

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

默认线程,如DestroyJavaVM,Reference Handler,Signal Dispatcher

在我自己的剖析器上工作,我想解释一下我所看到的.即使在最简单的程序中,也会出现一些默认线程:

  • DestroyJavaVM
  • 信号调度员
  • 终结
  • 参考处理程序

虽然他们的名字非常自我记录,但我希望获得更多信息.似乎这些线程没有记录,有人知道挖掘这些信息的来源,甚至知道这些线程到底做了什么吗?

java multithreading jvm

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

在Java中强制虚假唤醒

这个问题不是关于,虚假的唤醒是否真的很开心,因为这已经在这里全面讨论过:虚假的唤醒真的发生了吗?因此,这也不是为什么我必须围绕我的wait声明循环.这是关于:

我想构建一个虚假唤醒发生的案例.到目前为止我在上面提到的问题中学到的是:

如果发出一个Linux进程的信号,它的等待线程将各自享受一个不错的,热的虚假唤醒.

所以看来这只能用于linux机器,实际上我有Ubuntu 11.04 - 64位.我编写了一个Java程序,其中一个线程正在等待一个条件,但没有循环和另一个类,线程只是等待并被另一个线程通知.我认为在一个JVM中启动所有三个线程会强制执行上述情况,但似乎并非如此.

有没有其他人知道如何在Java中构建这样的案例?

java linux multithreading posix pthreads

28
推荐指数
2
解决办法
3108
查看次数

总是用C++创建类?

来自Java背景,对我来说,处理创建类的选择或者只是实现我可能需要的函数是新的.通常,在建模可能具有状态的东西时,这是毫无疑问的.

现在我正在实现一个没有main函数和静态成员函数的共享库.是否有些东西反对创建一个类来封装函数?

此外,我想在另一个文件中封装更多代码,尤其是辅助功能.执行代码总是相同的,并且它的状态不会改变,所以我想我会声明它们也是静态的 - 所以这里出现了同样的问题.

c++ static static-methods

17
推荐指数
3
解决办法
809
查看次数

寻找一个令人惊讶的并发Java程序

自从我写一个分析器注重并发方面,我要寻找使用好的人造例如同步机制的Java.我的探查器可以看到与线程相关的一些操作; 例如:

  • 呼叫通知/等待
  • 线程改变其状态
  • 一个线程与另一个线程争用一个监视器锁
  • 在与另一个竞争之后,线程已获取监视器锁定
  • 测量每种方法的执行时间
  • 哪个线程访问了某种方法以及访问频率
  • 等等

所以我正在寻找的是一个Java程序,乍一看似乎是理解的,但在执行它时,你开始怀疑结果.我希望我的探查器可能能够检测到后台发生了什么.


为了澄清自己,我举一个例子,Brian Goetz撰写的Java Concurrency in Practice一书给出了"有毒"代码示例,这些示例用于学习原因.

@NotThreadSafe
public class ListHelper<E> {
    public List<E> list =
        Collections.synchronizedList(new ArrayList<E>());
    ...
    public synchronized boolean putIfAbsent(E x) {
        boolean absent = !list.contains(x);
        if (absent)
            list.add(x);
        return absent;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是通过该方法的线程安全类的扩展putIfAbsent.由于list是同步的,但putIfAbsent使用另一个锁来保护状态,就像列表中定义的方法一样.

分析器可以显示使用过的监视器锁和用户的惊讶(或者不是......),用户会看到有两个可能的监视器锁而不是一个.

我不太喜欢这个例子,但我不会问,如果我已经有很多好的例子了.


我发现我的问题类似于:你在Java中遇到的最常见的并发问题是什么?Java并发错误模式.

但他们只提到破坏的并发程序.我也在寻找线程安全的实现,但仍然不明显它们是线程安全的.

java concurrency multithreading

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

不显眼的JavaScript过时了吗?

当我第一次阅读Web标准课程中不引人注目的JavaScript原理时,我认为这是一件非常棒的事情.

不引人注目的JavaScript更像是一种编程哲学,而不是一种技术.到目前为止,它最重要的组件是清楚地了解哪个功能属于哪个层.所有绝对关键的网站功能都应该用纯HTML编码,但是一旦你创建了这个基础,就可以在基础之上添加一个JavaScript层,以便为支持它的浏览器提供更好,更清晰,更快速的界面.

此外,不引人注目的JavaScript:

  1. 分离结构和行为,以使您的代码更清晰,脚本维护更容易

  2. 抢占浏览器不兼容性

  3. 使用干净的语义HTML层

对于我目前的项目,我使用这种方法.当我把JavaScript关闭以进行其他一些我必须做的工作时,我很惊讶有多少网站在没有JavaScript的情况下完全被破坏:缺少功能,以及缺少很多重要信息,这些信息根本不存在DOM.

这些特别是社交网站.这种情况应该不足为奇,所需的开发时间和用户体验可能比可访问性更重要.

我仍在问自己,不引人注目的JavaScript是不是已经过时了.我的意思是哪个浏览器本身不支持JavaScript?它仍然是适合2012年的方法吗?我开始怀疑它.

javascript paradigms accessibility web

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

从API级别11开始,通过adb shell设置剪贴板文本

在API级别11之前,可以使用以下service程序设置剪贴板的内容adb shell:

service call SERVICE CODE [i32 INT | s16 STR] ...
Options:
    i32: Write the integer INT into the send parcel.
    s16: Write the UTF-16 string STR into the send parcel.
Run Code Online (Sandbox Code Playgroud)

有三个整数代码来定义方法:

1 TRANSACTION_getClipboardText
2 TRANSACTION_setClipboardText
3 TRANSACTION_hasClipboardText
Run Code Online (Sandbox Code Playgroud)

例如这个命令

$ adb shell service call clipboard 2 i32 1 i32 1 s16 "Hello Android!"
Run Code Online (Sandbox Code Playgroud)

将剪贴板的内容设置为"Hello Android!".从API级别11开始,不推荐使用列出的方法,新的方法将ClipData作为参数.你如何通过现在设置剪贴板内容adb shell

api clipboard android adb

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

Java Attach API:动态更改java.library.path

在我的Windows机器上使用com.sun.tools.attach API时,在拨打电话时出现以下错误

VirtualMachine.list()
Run Code Online (Sandbox Code Playgroud)

java.lang.UnsatisfiedLinkError:java.library.path中没有附加

原因是缺少attach.dll.attach.dll位于$JRE/bin/.启动我的Java程序时,-Djava.library.path=[Directory to the attach.dll]一切都没有错误输出.

现在,我不想添加每个Java程序启动这个丑陋的JVM参数.因此我的问题是:

  1. 我的机器配置不正确,$JRE/bin/应该在库路径中吗?

  2. 如果没有,我该如何动态添加路径?System.setProperties("java.library.path",StringOfThePathToTheAttach.dll);没有成功.库路径已更改,但无论如何都会出现错误.这与SecurityManager或JVM的启动有关吗?

java windows jvm

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

更改Eclipse CDT项目的输出目录

我找不到更改构建文件输出的可能性.我发现唯一停用整个生成的makefile进程,我不想这样做.

c++ makefile eclipse-cdt

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

Java Swing中的控制器是什么?

我想以有意义的方式使用Swing将MVC设计应用于我的Java应用程序.因此我的问题是,如何在Java Swing中构建控制器?

我有两个选择:

  1. 每个组件侦听器都是一个自己的类,作为控制器包的一部分
  2. 每个组件侦听器都是视图包中的一个匿名类,它使用控制器方法将其调用委托给一个类.

这两种可能吗?这是一个偏好问题,还是明确界定?

java model-view-controller swing

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