小编Ste*_*hen的帖子

这三个参数化变量有何不同?

鉴于AGenericClass如下:

public class AGenericClass<T> {
  T subject;
  public void setSubject(T subject) {
    this.subject = subject;
  }
}
Run Code Online (Sandbox Code Playgroud)

变量a,bc之间什么区别?

AGenericClass<String> a = new AGenericClass<>();
AGenericClass<?> b = new AGenericClass<String>();
AGenericClass c = new AGenericClass<String>();

a.setSubject("L"); // OK.

b.setSubject("M"); // Error: setSubject(capture<?>) cannot be
                   // applied to (java.lang.String)

c.setSubject("N"); // Warning: Unchecked call to 'setSubject(T)'
                   // as a member of raw type 'AGenericClass'
Run Code Online (Sandbox Code Playgroud)

a bc all都是在没有IDE控制的情况下声明的,但是在setSubject调用时它们的行为都不同.

java generics

6
推荐指数
1
解决办法
109
查看次数

理解java中的有界泛型.有什么意义?

我试图理解有界类型,而不是完全理解它们的观点.

https://docs.oracle.com/javase/tutorial/java/generics/bounded.html上有一个有界泛型的例子,它提供了这个用例:

public class NaturalNumber<T extends Integer> {

    private T n;

    public NaturalNumber(T n)  { this.n = n; }

    public boolean isEven() {
        return n.intValue() % 2 == 0;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果要限制可以作为参数化类型的类,为什么不要忘记参数化,并且具有:

public class NaturalNumber {

    private Integer n;

    public NaturalNumber(Integer n)  { this.n = n; }

    public boolean isEven() {
        return n.intValue() % 2 == 0;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后,任何扩展/实现Integer的类都可以与此类一起使用.

另外,还有一个问题:当Java Integer类最终时,T扩展Integer是如何在第一个例子中扩展的?

谢谢.

java generics bounded-types parameterized-types

4
推荐指数
1
解决办法
815
查看次数

尝试使用Dagger 2实现MVP - 如何在提供的演示者中获取对Activity的引用

我正在尝试用MVP和Dagger建立一个应用程序,

视图是一个Activity其中实现了一个图界面.

public class OverviewActivity extends AppCompatActivity implements OverviewContract.View {

    @Inject OverviewPresenter presenter;

    @BindView(R.id.history_days) ListView HistoryLabels;
    @BindView(R.id.history_events) ListView HistoryEvents;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_overview);
        ButterKnife.bind(this);

        DaggerOverviewComponent.create().inject(this);

    }

    @Override
    public void showHistory(List<Exercise> history) {
      // ...
    }

    @Override
    public void updateScoreSlider(float value) {
      // ...
    }

    @OnClick(R.id.add_event_button)
    public void addEvent(View v){
      // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

演示看起来像这样

public class OverviewPresenter implements OverviewContract.Events {

    OverviewContract.View view;

    public OverviewPresenter( OverviewContract.View overviewView ) {
        view = …
Run Code Online (Sandbox Code Playgroud)

mvp android dependency-injection dagger-2

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