Articles of generics

理解类

我遇到了这段代码: public class RestfulAdage extends Application { @Override public Set<Class> getClasses() { Set<Class> set = new HashSet<Class>(); set.add(Adages.class); return set; } } 我不明白Class意思。

在当前情况下无法访问

我有以下代码 public abstract class BaseAdapter extends ArrayAdapter { public BaseAdapter(Context context, int resource, Collection collection) { // typical constructor logic } // some other custom defined methods public static class ViewHolder { // custom defined logic } } public class ModelAdapter extends BaseAdapter { public ModelAdapter(Context context, int resource, Collection collection) { super(context, resource, collection); […]

通用OR代替AND

是否可以通用参数化接受EAEER ClassA或InterfaceB的方法? 由于|不编译 伪代码 public void orDoer(T someData){ // … } 即不是写多个方法签名,我希望这个方法接受Number或CharSequence作为参数 应该使用Number或CharSequenceparameter passing orDoer(new Integer(6)); int somePrimitive = 4; orDoer(somePrimitive); orDoer(“a string of chars”);

Java通用方法types参数

generics方法的显式types参数有问题。 我知道我可以做到这一点: Foo.<Bar>function(); 假设有一个 void <T> function() {…} 函数在Foo类中。 确切的问题是: 我想下载一些内容(Android与Ion ) 这些内容是相似的(Article,BlogArticle,…),都实现了一个ContentItem接口 目前下载看起来像这样: 新闻例如 private void downloadNews() { Ion.with(this) .load(URL_NEWS) .as(new TypeToken<List<Article>>(){}) .setCallback(new FutureCallback<List<Article>>() { @Override public void onCompleted(Exception e, List<Article> result) { // do something with result } }); } 如果我想下载博客文章,我只能更改url和文章类(对于BlogArticle)。 我试图做一个这样的通用函数: private <T extends ContentItem> void download(String url) { Ion.with(this) .load(url) .as(new […]

Proguard混淆和通用方法

我试图用ProGuard混淆Android应用程序。 这里我有一堂课 public class Book implements DBbinded 和一个通用的方法 private void storeDBObjects(ArrayList<? extends DBbinded> dbObjects) 此方法的调用在模糊处理之后抛出java.lang.ClassCastException:java.util.LinkedHashMap。 我应该写入proguard.properties来解决这个问题?

为什么当我尝试覆盖与Guice的通用绑定时出现错误? (TypeLiteral)

我想重写generics绑定,但我总是得到相同的“ No implementation was bound ”的错误。 我正在使用roboguice 3。 这里是我使用的代码示例: public interface IParser<I, O> {} public class Parser1 implements IParser<String, String> { IParser<String, String> mParser; @Inject public Parser1(IParser<String, String> parser) { mParser = parser; } } public class Parser2 extends Parser1 { @Inject public Parser2(IParser<String, String> parser) { super(parser); } } public class MyModule extends AbstractModule […]

正确的方式来扩展ParseObject并有一个通用的查询工厂

我需要一种方法来根据用户的select查询不同的parsing类。 我接触到这个问题如下。 请告知如何解决我所遇到的问题或者build议替代/更好的方法。 我有对应于Parse类的类A, B, C, … 他们非常相似。 所以,我创build了抽象类Q : public abstract class Q extends ParseObject { // some shared methods public abstract ParseQuery<? extends Q> getQuery(); } A, B, C, …每A, B, C, …被定义为: @ParseClassName("A") public class A extends Q { private static final A INSTANCE = new A(); @Override public ParseQuery<A> getQuery() { […]

为通用超types的types参数创buildTypeToken

我正在为两个依赖的generics模型实现一个Gson TypeAdapter 。 interface ModelA<T> {} interface ModelB<T> extends ModelA<List<T>> {} 为此,我需要获取TypeToken和TypeAdapter 。 通过做 Type type = ((ParameterizedType) type).getActualTypeArguments()[0]; TypeToken<?> token = TypeToken.get(type); TypeAdapter<?> adapter = gson.getAdapter(token); 对于任何给定types的AnyType和相关的适配器,我都得到一个types标记。 这就是我需要的ModelA ,但是对于ModelB我需要List<AnyType>的适配器,这是直接使用ModelA<List<AnyType>>的结果。 使用原始types令牌的原始types的接口传递 token.getRawType().getGenericInterfaces()[0] 我似乎只得到types擦除types的List 。 我怎样才能将这两个信息结合起来得到genericsList<AnyType>types或直接创build它? 作为input,它只有ModelB<AnyType>的types标记。 例 对于给定的行为,我实施了一个简单的testing,显示差异。 我已经从哈恩的答案,使用Gson内部非API类$Gson$Types的expected部分。 public class TypeTokenValidate { public interface ModelA<T> {} public interface ModelB<T> extends ModelA<List<T>> {} @Test public […]

Android支持注释 – 如何使用IntDef / StringDef(Typedef注释)与generics列表?

最近我开始使用android的支持库IntDef / StringDef(Typedef Annotations)。 我遵循在Android工程项目网站的文档,无法find那里或在任何其他相关教程如何使用IntDef / StringDef typedef注释与generics数组。 例如,假设我有以下代码片段: public static final String MEDIA_IMAGE = "image"; public static final String MEDIA_TEXT = "text"; public static final String MEDIA_LINK = "link"; public static final String MEDIA_AUDIO = "audio"; public static final String MEDIA_VIDEO = "video"; public static final String MEDIA_VOICE = "voice"; @StringDef ({MEDIA_IMAGE, MEDIA_TEXT, MEDIA_LINK, […]

Kotlin – 当用返回types的函数expression时

我想利用kotlin的expression式和generics方法来简化Android的共享偏好api。 而不是一直调用getString()和getInt()等等,我想要做的是创build一个扩展函数,它将根据函数的返回types进行切换,并调用适当的方法。 如下所示: fun <T> SharedPreferences.get(key: String): T? { when (T) { //how do I switch on return type and call appropriate function? is String -> getString(key, null) is Int -> getInt(key, -1) is Boolean -> getBoolean(key, false) is Float -> getFloat(key, -1f) is Long -> getLong(key, -1) } return null } 当然,这是行不通的。 但是在expression函数的返回types时有什么解决scheme吗? 所有build议都欢迎。