小编Pau*_*cas的帖子

为什么我会得到"非法泛型类型"?

鉴于:

public class C<T> {
    private class D {
        public boolean equals( Object o ) {
            if ( !(o instanceof D) )    // line 4
                return false;
            D other = (D)o;             // line 6
            return i == other.i;
        }
        int i;
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

C.java:4: illegal generic type for instanceof
          if ( !(o instanceof D) )
                              ^
Run Code Online (Sandbox Code Playgroud)

我还得到关于第6行的"未经检查的演员"警告.为什么?该o不是一个泛型类型-它只是一个普通的Object.如何equals()通过检查和转换为实例来正确实现D

注意:显然,这个代码示例是我实际代码的削减版本.真正的类CD更大,并且D是其实现privateC使用的内部类.

仅供参考:真实 …

java generics

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

Mac OS X中的文件级文件系统更改通知

我希望在修改给定目录下(直接或间接)任何文件时通知我的代码.通过"修改",我的意思是我希望每当文件的内容被更改,重命名或删除时都会通知我的代码; 或者是否添加了新文件.对于我的应用程序,可能有数千个文件.

我看起来像FSEvents,但其技术概述部分地说:

需要注意的重点是通知的粒度在目录级别.它只告诉您目录中的某些内容已更改,但不会告诉您更改的内容.

它还说:

文件系统事件API也不是为了查找特定文件何时更改而设计的.出于这种目的,kqueues机制更合适.

但是,为了在给定文件上使用kqueue,必须打开文件以获取文件描述符.管理数千个文件描述符是不切实际的(并且可能会超过最大允许的打开文件描述符数).

奇怪的是,在Windows下,我可以使用该ReadDirectoryChangesW()功能,它正是我想要的.

那么如何在Mac OS X下做我想做的事情呢?或者,问另一种方式:如何ReadDirectoryChangesW()在用户空间中编写等效的Mac OS X(并且非常有效地执行此操作)?

macos readdirectorychangesw fsevents kqueue

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

跨DLL边界抛出C++异常

我已经阅读了有关如何不在一个DLL中分配堆内存并从该DLL外部解除分配的各种事项.但是抛出一个只是临时的异常对象(如大多数异常对象)呢?例如:

throw my_exception( args ); // temporary: no heap allocation
Run Code Online (Sandbox Code Playgroud)

当异常对象被捕获到DLL外部时,最终将执行该对象的析构函数,并将回收该对象的非堆内存.这样可以,因为它不是堆内存吗?

c++ dll exception-handling

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

基于整数类型"signed-ness"的部分模板专业化?

鉴于:

template<typename T>
inline bool f( T n ) {
  return n >= 0 && n <= 100;
}   
Run Code Online (Sandbox Code Playgroud)

unsigned类型一起使用时会生成警告:

unsigned n;
f( n ); // warning: comparison n >= 0 is always true
Run Code Online (Sandbox Code Playgroud)

有没有什么聪明的办法不是做比较n >= 0T是一个unsigned类型?我尝试添加部分模板专门化:

template<typename T>
inline bool f( unsigned T n ) {
  return n <= 100;
}   
Run Code Online (Sandbox Code Playgroud)

但是gcc 4.2.1并不喜欢这样.(我没想到的是一种模板偏特的将是法律反正.)

c++ templates specialization

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

为什么auto_ptr <T>没有定义运算符!()?

标题几乎总结了我的问题.为什么不能执行以下操作来检查空指针?

auto_ptr<char> p( some_expression );
// ...
if ( !p )  // error
Run Code Online (Sandbox Code Playgroud)

必须这样做:

if ( !p.get() ) // OK
Run Code Online (Sandbox Code Playgroud)

为什么auto_ptr<T>不简单operator!()定义?

c++ auto-ptr

20
推荐指数
3
解决办法
2431
查看次数

邮件"无法继续"AppleScript功能

我正在尝试编写AppleScript以与Mail(在Snow Leopard上)一起使用,以将邮件的图像附件保存到文件夹中.AppleScript的主要部分是:

property ImageExtensionList : {"jpg", "jpeg"}
property PicturesFolder : path to pictures folder as text
property SaveFolderName : "Fetched"
property SaveFolder : PicturesFolder & SaveFolderName

tell application "Mail"
  set theMessages to the selection
  repeat with theMessage in theMessages
    repeat with theAttachment in every mail attachment of theMessage
      set attachmentFileName to theAttachment's name
      if isImageFileName(attachmentFileName) then
        set attachmentPathName to SaveFolder & attachmentFileName
        save theAttachment in getNonexistantFile(attachmentPathName)
      end if        
    end repeat
  end repeat
end tell

on isImageFileName(theFileName)
  set dot to offset …
Run Code Online (Sandbox Code Playgroud)

email applescript

17
推荐指数
2
解决办法
3972
查看次数

如何在Linux上调试本机Java崩溃?

我已经看到了这个问题以及关于如何调试本机Java崩溃的这篇文章.这篇文章是关于Windows的.在Linux上有哪些等效的调试帮助?

注意:我所拥有的只是该字段中用户的崩溃日志.我无法访问发生崩溃的机器.

更新:我很确定崩溃是由于我们拥有的JNI代码.我从来没有打算暗示JVM本身是错误的.

每个请求,这里是崩溃转储(或者它适合30K stackoverflow限制):

#
# An unexpected error has been detected by Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x06300e76, pid=9983, tid=4106996592
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing)
# Problematic frame:
# V  [libjvm.so+0x300e76]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x0922e000):  VMThread [id=9985]

siginfo:si_signo=11, si_errno=0, si_code=1, …

java linux debugging jvm

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

一个好的C++编译器会优化参考吗?

我想写一个模板函数,它与a std::stack<T>和一个实例做一些事情T,例如:

template<class StackType> inline
bool some_func( StackType const &s, typename StackType::value_type const &v ) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

我通过v引用传递的原因当然是针对StackType::value_typea struct或者class不按值复制整个对象的情况进行优化.

但是,如果它StackType::value_type是一个"简单"类型int,那么它当然更简单地通过值传递它.

的问题是:对于一个类型,如int,将成为int const&作为一个正式的参数在上面的功能,将编译器优化掉参考和简单地通过值传递呢?

c++ optimization templates argument-passing

14
推荐指数
3
解决办法
2771
查看次数

从Hit/Hits迁移到TopDocs/TopDocCollector

我有现有的代码,如:

final Term t = /* ... */;
final Iterator i = searcher.search( new TermQuery( t ) ).iterator();
while ( i.hasNext() ) {
    Hit hit = (Hit)i.next();
    // "FILE" is the field that recorded the original file indexed
    File f = new File( hit.get( "FILE" ) );
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我不清楚如何使用TopDocs/ 重写代码TopDocCollector以及如何迭代所有结果.

java lucene

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

以UTF-16或UTF-32编码JSON

JSON RFC,第2.5节,说部分:

要转义不在基本多语言平面中的扩展字符,该字符表示为十二个字符的序列,编码UTF-16代理项对.因此,例如,仅包含G谱号字符(U + 1D11E)的字符串可以表示为"\ uD834\uDD1E".

假设我有正当理由将JSON编码为UTF-16BE(允许).这样做时,是否仍然需要转义不在基本多语言平面中的字符?例如,而不是这个:

00 5C 00 75 00 44 00 38 00 33 00 34 00 5C 00 75 00 44 00 44 00 31 00 45
  \     u     D     8     3     4     \     u     D     D     1     E
Run Code Online (Sandbox Code Playgroud)

这是24字节的UTF-16BE字节序列\uD834\uDD1E,这样做是合法的:

D8 34 DD 1E
Run Code Online (Sandbox Code Playgroud)

即,直接使用4字节UTF-16BE值?

同样,如果我要编码与UTF-32BE相同的JSON字符串,我可以直接使用代码点值:

00 01 D1 1E
Run Code Online (Sandbox Code Playgroud)

unicode json character-encoding

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