如何解决:在使用T类型的同时,未使用T类型的参数?

huangapple go评论71阅读模式
英文:

How to resolve: parameter never used with T type while T itself is used?

问题

以下是翻译好的内容:

我遇到了一个Java警告("Parameter myParameter is never used"),它出现在我的通用方法中,我在这个方法中使用了参数的类型(T),但没有使用参数值本身。我能否在不使用SuppressWarnings注解的情况下避免这个警告?

private <T extends MyInterface> MyGenericObject<T> init(Class<T> myParameter) {
   // 很多共同的代码在这里... 还有:
   return new MyGenericObject<T>();
}

我目前使用这个方法的方式:

MyGenericObject<MyClassA> aInstance = init(MyClassA.class);
MyGenericObject<MyClassB> bInstance = init(MyClassB.class);

也许有一种方法可以只传递类型而不是参数给我的方法,但我找不到这样的方法。你能帮我解决这个问题吗?

英文:

I am facing with a Java Warning ("Parameter myParameter is never used") on my generic method where I use type of the parameter (T) but not the parameter value itself. Can I avoid this warning without using SuppressWarnings annotation?

private &lt;T extends MyInterface&gt; MyGenericObject&lt;T&gt; init(Class&lt;T&gt; myParameter) {
   // lots of common code here ... and:
   return new MyGenericObject&lt;T&gt;();
}

The way I use this method at the moment:

MyGenericObject&lt;MyClassA&gt; aInstance = init(MyClassA.class);
MyGenericObject&lt;MyClassB&gt; bInstance = init(MyClassB.class);

Perhaps there must be a way to pass only the type to my method without parameter, but I cannot find the way for it. Could you please help me out with that?

答案1

得分: 1

&gt; 在我使用参数(T)的类型

但是你不需要`myParameter`来提供给你`T`。它将在没有它的情况下以一般方式工作:

```java
private <T extends MyInterface> MyGenericObject<T> init() {
   // 大量的通用代码在这里 ... 并且:
   return new MyGenericObject<T>();
}

// 并且像这样调用:
MyGenericObject<MyClassA> aInstance = init();
MyGenericObject<MyClassB> bInstance = init();

类型参数实际上并不是你使用的一个“东西”。它只是给编译器的指令,确保所有引用T的类型是兼容的。


<details>
<summary>英文:</summary>

&gt; where I use type of the parameter (T)

But you don&#39;t need `myParameter` to provide you with `T`. It will work generically without it:

private <T extends MyInterface> MyGenericObject<T> init() {
// lots of common code here ... and:
return new MyGenericObject<T>();
}

// and invoke like:
MyGenericObject<MyClassA> aInstance = init();
MyGenericObject<MyClassB> bInstance = init();


A type parameter isn&#39;t really a &quot;thing&quot; you use. It&#39;s just an instruction to the compiler to make sure that all of the types which refer to `T` are compatible.

</details>



huangapple
  • 本文由 发表于 2020年9月3日 00:05:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/63709322.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定