簡體   English   中英

Java中的泛型類參數

[英]Generic Class Arguments in Java

所以我在我的Android應用程序中傳遞活動和意圖以處理線程(我確信有一個更好的范例,因為我的代碼開始變得惱人的意大利面 - 通常是我的標志沒做對的事)。

但無論如何,我正在嘗試做這樣的事情:

public class SomeCoolActivity extends Activity {
    private class DoSomeTaskThatInvolvesEitherTheNetworkOrASleepStatementWithoutScrewingUpTheUiThread extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... params) {
            // Do something useful on a non-UI thread...
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // Now that's done, I need to progress to the next activity. If I do that here,
            // I will get errors. So instead, I will call a method on my parent activity class:
            loadNextActivity(NextActivity.class);
        }
    }

    protected void loadNextActivity(Class<Activity> activityToLoad) {
        startActivity(new Intent(this, activityToLoad));
    }
}

但這不起作用,因為它告訴我有一個錯誤,那

NextActivity.class

不是活動。 是的,顯然它不是完全相同的類,但是人們希望我能夠傳遞任何派生自Activity的類(包括NextActivity),但不能傳遞任何沒有的類(如果我定義loadNextActivity,它實際上工作正常如

protected void loadNextActivity(Class<?> activityToLoad)

但這不太理想,因為我可以傳遞任何我想要的東西,也許是一個不是活動的東西......畢竟這是Java,而不是Ruby。 而且,如果它只允許我通過一個班級......究竟什么是好的呢?

那我該怎么做呢?

你可以寫通配符,如:

protected void loadNextActivity(Class<? extends Activity> activityToLoad)

使用Class<?>不好的做法。 您不會知道類令牌的確切類型。 嗯,嘗試使用通配符為我的方法定義全局行為,就像我上面寫的那樣。

順便說一下,確保您添加到Manifest.xml文件中的每個活動,例如:

<activity android:name=".com.bla.bla.YourOtherActivity" />

你的代碼評論說:“如果我在這里做,我會得到錯誤。” 你得到了什么錯誤? 你是否有一個無效的上下文作為getIntent()的參數? 或者startActivity()無效? 可能的原因是onPostExecute()是從內部類調用的,而不是Activity本身。

嘗試這個:

  onPostExecute(Void result) {
    Intent intent = new Intent(SomeCoolActivity.this, NextActivity.class);
    startActivity(intent);
  }

旁注:您不想傳遞活動, 不想將它們保存在變量中。 如果你這樣做,你就會泄漏整個視圖層次結構,並且會快速耗盡ram。

暫無
暫無

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

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