【java – 有没有办法通过使用泛型来避免instanceof?】教程文章相关的互联网学习教程文章

如何使用Java泛型编写管道类【代码】

以下类声明用于处理数据项的管道.目前,这可以正常工作.但是在Pipeline类中有一些我不知道要正确解决的警告:public abstract class Stage<In, Out> {public abstract DataItem<Out> processItem(DataItem<In> data) throws Exception; }public class DataItem<T> {public T data;public DataItem(T obj) {this.data = obj;} }// chain Stages together public class Pipeline { private List<Stage<?,?>> stages;public Pipeline...

java-使用泛型方法检查对象是否在数组中【代码】

在Herbert Schildt(第10版)的“ Java完全参考”(第10版)中,有关泛型的第14章提供了以下泛型方法示例,用于检查对象是否在数组中:class GenMethDemo {static <T extends Comparable<T>, V extends T> boolean isIn(T x, V[] y) {. . .}. . . }我不明白为什么在这里使用V扩展T. 为什么我们允许数组的类型成为我们检查成员资格的对象的子类?不应该这样吗?解决方法:在这种情况下,由于要在V []上调用Comparable方法,因此V必须是T的子类...

Java泛型如何避免使用不同的参数多次实现接口【代码】

这是场景. 我们的应用程序有一个非常简单的接口用于缓存实现,其方法类似于Map:public interface ICache<K, V> {为了添加具体的缓存实现,我们实现了接口并包装了一个缓存框架,例如EHCache,Redis,memcached等.示例(此处的EHCache对问题无关紧要的事实):public abstract class EHCacheWrapper<K,V> implements ICache<K, V> {接下来,我们有一个称为AuthenticationCache的EHCacheWrapper实现:public class AuthenticationCache exte...

java-使用泛型时遇到类型安全警告【代码】

我有一堂课,看起来像这样.class SuperClass<T> {public <K extends ClassB> K someMethod(T t) {return null;} }class ClassB {}class ClassA extends ClassB {}class ClassC {}public class Main extends SuperClass<ClassC>{@Overridepublic ClassA someMethod(ClassC c) { //type safety warning in ClassAreturn null;} }根据我的理解,someMethod()的返回类型可以是扩展ClassB或ClassB本身的任何类.显然,ClassA是ClassB.似乎是...

JAVA学习笔记:java语言高级特性(泛型)【代码】

泛型Generics Parameterized Types 类型参数化 1、泛型的定义 泛型是JDK 1.5的一项新特性,它的本质是参数化类型(Parameterized Type), 也就是说所操作的数据类型被指定为一个参数,在用到的时候在指定具体的类型。 这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。 泛型的类型将来传入是只能是引用类型的,不能是基本类型的。 例如: //编译通过List<String>List<Action>List<Integer>List<Integer...

Java day12【第二十二章】泛型【代码】

【第二十二章】泛型 一.泛型问题引出:泛型从JDK1.5之后追加到Java语言里面的,其主要目的是为了解决ClassCastException的问题,在进行对象的向下转型时,永远都存在有安全隐患。 而Java希望可以通过泛型可以慢慢解决掉此类问题。泛型的问题引出:现在假设说定义一个描述X与Y坐标的处理类,并且在这个类之中允许开发者保存三类数据。 整型数据:x=10、y=20; 浮点型数据:x = 10.1、y=20.9; 字符串型数据:x = 东经120度、北纬30度...

java-通配符和泛型错误【代码】

下面的代码是一次性的,使枚举在新的foreach循环中工作是一个失败的想法,但是由于我一直遇到泛型和通配符的问题,因此我希望对其进行编译.无论出于什么原因,我都看不出如何解决它. 那么,需要进行哪些更改才能进行编译?import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipFile;public class Main {private ZipFile...

Java泛型和通配符:如何使此代码编译?【代码】

我正在使用Hamcrest 1.2库编写一些匹配器,但Java通配符却很难.当我尝试编译以下代码时public class GenericsTest {public void doesNotCompile() {Container<String> container = new Container<String>();// this is the desired assertion syntaxassertThat(container, hasSomethingWhich(is("foo")));}// these two are a custom made class and matcher; they can be changedpublic static class Container<T> {public boolean...

java-实例化泛型类时传递类型变量【代码】

有人可以解释ArrayList类的这两个实例之间的区别是什么吗?List<Integer> intList = new ArrayList(); List<Integer> intList = new ArrayList<Integer>();我知道编译器在将其编译为字节码时会擦除类型变量(即Integer),并且上面的示例都完全相同.我想知道在右侧传递类型变量(Integer)是否有任何好处,因为它已经在左侧声明了?据我在网上可以找到的,它们都使用了后者,但是我看不出我为什么要在两端都声明两次的任何原因.解决方法:...

Java高级——泛型

本文主要讲述泛型的使用 1、在集合中的使用 2、自定义泛型类、泛型接口、泛型方法 3、泛型与继承的关系 4、通配符 由于第一点和第二点在平常的编码工作中已熟练,本文重点讲述后面两点。 直接show the code:package com.learn;import java.util.List;public class ParentGeneric<T> {private String name;private int id;private T t;public String getName() {return name;}public void setName(String name) {this.name = name;...

Java泛型总结【代码】【图】

Java并发 进程 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。 线程 线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是同类的多个线程共享进程的...

Java泛型-在调用instanceof之后,有什么方法可以避免强制转换(和未经检查的警告)?【代码】

Android代码-SharedPreferences类导出用于持久/检索不同首选项的不同方法:@SuppressWarnings("unchecked") public static <T> T retrieve(Context ctx, String key, T defaultValue) {SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);if (defaultValue instanceof Boolean) return (T) (Boolean) prefs.getBoolean(key, (Boolean) defaultValue);else if (defaultValue instanceof Float) return ...

java-创建泛型类的具体实例的数组【代码】

我有一个通用类Position< E>和一个具体的类卡.如何创建Position< Card>类型的数组? 我试过了:Position< Card> [] suitPositions =(Position< Card> [])new Object [5];但我得到一个ClassCastException. 但是当我尝试:Position< String> [] suitPositions =(Position< String> [])new Object [5];它工作正常.解决方法:使用原始类型创建数组:Position<String>[] suitPositions = new Position[5];

java-如何将泛型用作返回值并将泛型用作参数?【代码】

我尝试用泛型创建一个抽象类.业务逻辑是将文本从一种语言翻译成另一种语言.每种语言都必须有一个翻译器类.我还为每种语言都要求一个LanguageTranslation类,这是translation方法的返回对象,该类具有参数T.该T应该是OriginalText的子类(例如,EnglishText,ChineseText等).这就是我奋斗的地方.您如何编码此约束? 我创建了以下超级类.public abstract class Translator <T, V> { public abstract <V extends LanguageTransl...

List的Java泛型返回从多个接口继承的方法的类型【代码】

我目前在一家拥有各种模块的公司工作.在该公司中,如果您想提供模块内部,则可以通过java接口提供它,该接口隐藏实际的实现类型并为请求模块提供接口.现在,我希望有一个提供程序能够为暴露实际内部数据的不同字段或方法的多个模块提供数据. 因此,我有一个内部对象,其中包含一些数据,并且每个模块都有一个接口,需要访问某些但不是严格的所有字段.最后,我有一个实现所有这些接口的外部对象,并拥有内部对象的实例以委派方法调用:public ...