Articles of generics

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议都欢迎。

Kotlin属性:“属性的types参数必须在其接收器types中使用”

我有以下简单的Kotlin扩展function: // Get the views of ViewGroup inline val ViewGroup.views: List<View> get() = (0..childCount – 1).map { getChildAt(it) } // Get the views of ViewGroup of given type inline fun <reified T : View> ViewGroup.getViewsOfType() : List<T> { return this.views.filterIsInstance<T>() } 此代码编译和工作正常。 但是,我希望函数getViewsOfType成为一个属性,就像views 。 Android Studio甚至build议。 我让AS做重构,它生成这个代码: inline val <reified T : View> ViewGroup.viewsOfType: List<T> […]

android.util.Pair在androidTest中保存String 作为参数,但在(单元)testing中为null

我想unit testing一个UtilsClasstypes的静态方法,它返回一个Pair<String[], String[]> 。 在这个方法里面,我注入了一对String []到它的构造函数中。 final Pair<String[], String[]> pair = new Pair<>(new String[] {"Hello", "World"}, new String[] {"£33", "£44"}); 并期待这个对象被返回。 当我unit testing这个方法时,我得到一个非空的Pair对象,但是它的字段first = null和second = null 。 当我在Instrumentation-typetesting中运行相同的testing代码时,这些字段被正确填充。 我可以看到,在后一种情况下,构造函数public Pair(F first, S second) {我放置debugging点进入和字段设置,而不是在unit testing。 我正在寻找解释为什么会是这种情况,如果我应该避免首先在代码中传递String[]作为构造函数参数。

Android通用用户代理(UA)

我正在构build一个Android应用程序来显示来自服务器的内容提要。 服务器是一个移动网站(如http://m.google.com ),它跟踪来自各种移动客户端的stream量。 要区分Android客户端,我该如何为我的应用程序提供一个通用string? 这就是为什么我这样问: 我得到的一些Android设备有UAstring,如: Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; ADR6400L 4G Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 Mozilla / 5.0(Linux; U; Android 2.1; en-us; Eclair_SPR Build / 30201)AppleWebKit / 520.17(KHTML,如Gecko)版本4.0 Mobile Safari / 520.17 我需要附加一个string到UserAgentstring来识别我的应用程序。 例如: 我需要做这样的事情: Mozilla/5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build/30201) AppleWebKit/520.17 (KHTML, like Gecko) Version/4.0 […]