簡體   English   中英

var.getClass()何時返回Object?

[英]When does var.getClass() return Object?

該提交: https : //github.com/SpongePowered/SpongeCommon/commit/704ef84398255d66da104e2b43dec7f2c2aa40c3#diff-0570d221b4c69a232692ff6be6369ea3R79

   public static String getIdAndTryRegistration(IProperty<?> property, Block block, String blockId) {
         <snip>
 +                Class<?> blockClass = block.getClass();
 +                while (true) {
 +                    if (blockClass == Object.class) {
 +                        final String originalClass = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, block.getClass().getSimpleName());
 +                        final String propertyId = originalClass + "_" + property.getName();
 +                        LogManager.getLogger("Sponge").warn("Could not find {} owning class, assigning fallback id: {}", property.getName(),
 +                                propertyId);

當傳遞給Block的類的引用等於Object.class時,添加比較和log語句

但是,在我自己的測試中

package org.spongepowered.test;

public class test {


    public static class Parent{}
    public static class Child extends Parent {}

    public static void main(String[] args) {
        Class<?> child = Child.class;
        Class<?> parent = Parent.class;
        System.out.println(child +"::"+parent);
        boolean b = Object.class == child;
        boolean c = Object.class == parent;
        System.out.println( b+"::"+c);

        System.out.println("==============================================");

        Class<? extends Child> child2 = Child.class;
        Class<? extends Parent> parent2 = Parent.class;
        System.out.println(child2 +"::"+parent2);
        //boolean b2 = Object.class == child2;
        //boolean c2 = Object.class == parent2;
        //System.out.println( b2+"::"+c2);
    }
}

我得到以下輸出:

class org.spongepowered.test.test$Child::class org.spongepowered.test.test$Parent
false::false
==============================================
class org.spongepowered.test.test$Child::class org.spongepowered.test.test$Parent

Process finished with exit code 0

.getClass什么時候可以返回Object.class?

知道這是有可能的,因為我們收到了許多包含該日志的錯誤報告。

Object.getClass()返回

代表此對象的運行時類的Class對象。

對象API文檔

這將是java.lang.Object.class當且僅當對象的類是完全java.lang.Object (不是一個子類)。 此方法是final ,因此您可以依賴提供該實現的每個對象。

但是,如果您正在尋找一種方法來反思性地確定一個類是否是另一個類的超類,則您可能也對Class.isAssignableFrom()感興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM