2009-08-28 4 views
3

これはどうして起こるのでしょうか?Java Class.getSimpleName()と.getName()は、CacaoとSun Javaの動作が異なっています

このJavaのDBusバインディング(2.6)

// don't let people import things which don't have a 
    // valid D-Bus interface name 
    System.out.println("type.getName: " + type.getName() + " type.getSimpleName: " + type.getSimpleName()); 
    if (type.getName().equals(type.getSimpleName())) { 
     throw new DBusException(_("DBusInterfaces cannot be declared outside a package: " + "type.getName: " + type.getName() 
       + " type.getSimpleName: " + type.getSimpleName())); 
    }  

からいくつかの修正行が今日1.5

@ubuntu:~/tmp/cacao$ java -version 
java version "1.5.0_16" 
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b02) 
Java HotSpot(TM) Client VM (build 1.5.0_16-b02, mixed mode, sharing) 

@ubuntu:~/tmp/cacao$ cacao -version 
java version "1.5.0" 
CACAO version 0.99.3+hg 

java -Djava.library.path=/usr/lib/classpath:/ho... DBusChat 

type.getName: org.freedesktop.DBus type.getSimpleName: DBus 
...Exception in thread "main" org.freedesktop.dbus.exceptions.DBusExecutionException: Could not get owner of name 'framez.tests.dbus.DbusChatInterface': no such name 

対対カカオ(0.99.4)からの出力の違いをチェックアウトしています。 ..

cacao -Djava.library.path=/usr/lib/classpath:/ho... DBusChat 
type.getName: org.freedesktop.DBus type.getSimpleName: org.freedesktop.DBus 

例外は重要ではありません。カカオの奇妙なバグですか?

.getName()がVMに依存するものかどうかは誰にも知られていますか?

情報:

GNUクラスパスの0.98の両方のJVM Dバスバインディング2.6

+0

クラスがスタンドアロンか内部クラスかどうかを判断する "間違った"メカニズムを歌います.getEnclosingClass()など –

答えて

15

にこれが最も可能性が高いカカオプラットフォームへのGNUクラスパスのポートのバグです。クラスパスのバージョンjava.lang.Classのメソッドの大半は、ライブラリの各ポートに実装する必要がある "vm"クラスに委譲しています。

確かにClass.getSimpleName()は、パッケージ修飾なしでクラス名を返すはずです。

+0

優秀な情報。ありがとうございました! – EdH

+1

これはクラスパスのバグです。カカオチームを確認しました。 vm.reference.java.lang.VMClassの簡単な修正。 – EdH

+1

最近、GNUクラスパスに新たな関心が向けられているようです。その結果、CVSにこの問題のパッチがあります:http://cvs.savannah.gnu.org/viewvc/classpath/classpath/vm/reference /java/lang/VMClass.java?r1=1.21&r2=1.22 – Ringding

関連する問題