有以下示例:public class Test {public static class A {}public static void main(String[] args) {A a = new A();m1(a);}public static <T> void m1(T t) {// t.getClass().getSimpleName() is A// t instanceof A is truem2(t);}/* Not called */public static void m2(A a) {System.out.println("A");}public static void m2(Object o) {// o.getClass().getSimpleName() is A// o instanceof A is trueSystem.out.println("O...
对不起,这个问题可能很简单,但我没有在互联网上找到答案.public class Main {public static void main(String[] args) {int a = 1;double b=2;max(a,b);} public static <E> void max(E first , E second) {System.out.println(first);System.out.println(second); }}当我们将第一个参数传递给一个整数时,然后将E设置为Integer,然后我们将一个double传递给它.我们应该得到一个编译错误. (因为E是整数)但程序正确运行并且输出为 1 2...
以下是我一直在尝试做的事情,简而言之:class example <T extends Number> {private int function(T number){int x = (int) number;...}... }基本上,我试图使它成为一个数字,所以我可以将它转换为该函数内的int.问题是我遇到了“不可动摇的类型”错误,所以我一定做错了.解决方法:考虑到抽象类Number是类的超类 * BigDecimal,BigInteger, * Byte,Double,Float, *整数,长期和短期…… 如果你想要一个int表示,你应该使用.intValue()函...
我是Java的新手,所以我不确定这是否可行.基本上我需要将文件反序列化为给定类型的对象.基本上该方法将执行此操作:FileInputStream fis = new FileInputStream(filename);ObjectInputStream in = new ObjectInputStream(fis);MyClass newObject = (MyClass)in.readObject();in.close();return newObject;我希望这个方法是通用的,因此我可以告诉它我想要in.readObject()将其输出转换为什么类型,然后返回它. 希望这是有道理的…然后再...
test1和test2之间的区别在哪里?为什么test1中的编译错误?import java.util.ArrayList; import java.util.Collection;class MyType {}class MyClass<T> {private Collection<MyType> myTypes = new ArrayList<MyType>();private Collection<T> myTs = new ArrayList<T>();public Collection<MyType> getMyTypes() {return myTypes;}public Collection<T> getMyTs() {return myTs;} }public class TestSimple {public void test1()...
有没有办法使这个方法适当通用并取消警告?/*** <p>Sort a collection by a certain "value" in its entries. This value is retrieved using* the given <code>valueFunction</code> which takes an entry as argument and returns* its value.</p>* * <p>Example:</p>* <pre>// sort tiles by number*Collects.sortByValue(tileList, true, new Function<Integer,NormalTile>() {* public Integer call(NormalTile t) {* r...
public abstract class Abc<T> {public abstract void f1(T a); }abstract class Def<T> extends Abc {@Overridepublic void f1(T a) {System.out.print("f");}}这会出现以下错误:“方法不会覆盖或实现超类型的方法” 这有什么不对?解决方法:您的类定义需要表明您正在扩展父类.abstract class Def<T> extends Abc<T>否则,编译器或多或少地假设您正在扩展Abc< object>,因此包含T参数的方法签名与父类的方法签名不匹配(因为它使用...
我有2个不同类型的不同地图,这两个地图都是BaseClass的子类. 我希望能够使用相同的逻辑将两个案例中的项目“保存”到地图中,使用Generics. 假设getId是BaseClass的方法. 我需要强迫 >该项目是BaseClass的子类>地图值与项目的类型相同 我怎样才能做到这一点?这是一个失败的尝试,它描述了我需要做的事情:private <T><?extends BaseClass> void save(T item, Map<Long, T> map) {if (item.getId() == null){long max = -1;for (Long...
我试图返回一个对象,该对象应该是IClass的一个实现,其泛型类型是IType的一个实现.public IClass<IType> createClass() {return new ActualClass(); }我想要返回的实际类扩展了Class(abstract),其泛型类型为ActualType:public class ActualClass extends Class<ActualType>抽象类对象实现IClass接口,并且可以具有扩展IType的任何类型public abstract class Class<T extends IType> implements IClass<T>ActualType只是实现了IType接...
如果我有一个带有如下通用方法的接口:public interface Thing {void <T extends Comparable<? super T>> doSomething(List<T> objects); }我在某些地方需要那些丑陋的泛型类型规范,但大多数实现实际上并不需要它:public class ICareAboutSortingThing implements Thing {@Overridepublic void <T extends Comparable<? super T>> doSomething(List<T> objects) { ... } }public class IDontCareAboutSortingThingx100 implements...
我需要从枚举和泛型中提供某种设施.枚举cannot have type parameters(它只是被语法禁止)并且实际上就像公共静态最终成员一样,我倾向于写这样的东西:public class GenericEnumLikeClass<T>{public static GenericEnumLikeClass<MyType> TYPE_INSTANCE;public static GenericEnumLikeClass<AnotherType> ANOTHER_INSTANCE;//other things }问题是我以前从未做过类似的事情,严格来说,不确定Java公约的正确性.它是否会被视为奇怪的东西...
我有一个基本接口,使用扩展相同基接口的类型R进行参数化:public interface IWidget<R extends IWidget<R>> {}然后以相同的方式参数化另一个接口:public interface IWidgetManager<R extends IWidget<R>> {}最后,一个类实现了第二个接口.这个类将在声明时收到IWidget实现类:public class MyWidgetManager<R extends IWidget<R>> implements IWidgetManager<R> {}我的问题 : 我们可以用来指定MyWidgetManager的更具体的类型是什么...
如果我有public abstract class SomeType<T extends SomeOtherType> {}public class WrapperType<U extends SomeType<T>> {}有没有办法修改后一个签名(这是一个错误’无法解析符号“T”’),以便我可以在WrapperType中使用泛型类型,比如List< T>或类似的东西? (如果我使用错误的术语提出这个问题,我会很感激修正.)解决方法:一旦你意识到发生了什么,这很简单.您没有在类WrapperType的范围内定义T.使用至少与SomeType相同的边界声明它...
在我不期望的情况下,我遇到类型不匹配错误.public interface I {}public abstract class C {}public class A extends C implements I {}public class B extends C implements I {}public class Foo {public <T extends C & I> T getComposition(String selector) {switch (selector) {case "a": return new A(); // type-mismatch!case "b": return new B(); // type-mismatch!}}}为什么A,既是C又是我,不能作为T返回?解决方法:符号...
我无法弄清楚如何使用泛型来编写我的equals方法,因为我确信如果使用instanceOf是必要的.我试图比较两个ItemPairs是相同的(逻辑上等价)如果对中的两个项目是相同的(逻辑上等价) 这是我的尝试:public class ItemPair<T> { private T item1; private T item2; public ItemPair(T item1, T item2) { this.item1 = item1; this.item2 = item2; }public T getItem1() {return item1; }public void setItem1(T item1) {this.item1 = ite...