有人能给我解释一下为什么类在Java中不是第一类对象吗?如果是这样的话,有一些模式会工作得很好,我经常使用getter和setter编写工厂类,并且只是向类添加不必要的繁琐操作,这样我就可以将实例传递给方法,而不是将实际的类传递给实际的类,从而排除泛型代码。例如:
public class AsyncBookSearch extends AsyncTask<String,BookItem,Void> {
public ListView list;
public AmazonItemAdapter<BookItem> adapter;
publi
我有一个名为Foo<T>的泛型类。
public class Foo<T> {
public void doSomething() {
Class<T> klass = T.class; // This won't compile
}
}
在googling之后,我发现由于java通过类型擦除来实现泛型,所以它不知道T的运行时类型,并且拒绝编译。不过,如果我试试这个..。
public class Foo<T> {
public void doSomething(T... ts) {
对瓷砖的事很抱歉。我不知道如何继续我的问题。
让我介绍一下我的问题:
我想要获取泛型类型的类型。
下面是一些代码:
public class AbstractDao<T, PK extends Serializable> {
public T getByPrimaryKey(PK primariKey) {
return null;
}
}
public class AbstractEntity<PK extends Serializable> {
PK id;
//Getter Setter
}
public class E
很抱歉问了这么明显的问题。
我有一个类型为T的“适配器”泛型类,其中T是已定义的接口。我想在该类中创建一个接受不同类型的通用适配器的方法。
public interface ICommon { }
public class TypeOne : ICommon { }
public class TypeTwo : ICommon { }
public class Adapter<T> where T : ICommon
{
void TakeAnotherType(Adapter<S> other)
{ }
}
这给了我一个编译错误Cannot reso
以下Haskell代码:
main = putStrLn $ "bla " ++ (toStr (A 1) (A 2))
--main2 = putStrLn $ "bla " ++ (toStr (A 1) (A "String")) -- does not compile, as it should
main3 = putStrLn $ "bla " ++ (toStr (A "String") (A "String"))
data A a = A a deriving Show -- (1)
如何将泛型类型添加到列表中?我试图创建一个T的对象,但这也不起作用。
class Bar<T> where T : IDrink
{
List<T> storage = new List<T>();
public void CreateDrink()
{
storage.Add(T); //<- This doesn't work
}
}
public static void AddOrUpdate<T>(T entry) where T : class
{
//stuff
}
public static void AddOrUpdate<T>(IEnumerable<T> entries) where T : class
{
foreach (var entry in entries)
{
//stuff
}
无论我在这个方法中发送了什么,第一个总是被选择的。如何将IEnmuerables和单个对象分开?
AddOrUpdate(en
我正在尝试清理重复的代码。唯一的区别是像这样的调用
MyType x = Foo.LookupService<MyType>();
与
MyType x = Bar.FindService<MyType>();
因此我们有两个T xxx<T>()类型的方法,即一个方法返回一个给定类参数T的T实例。如何将这样的函数作为参数传递给试图查找不同类型实例的方法,例如
foo([magic generics stuff] resolve)
{
MyType x = resolve<MyType>();
MyOtherType y = r
Im应该创建一个返回任何列表的最大值的方法,我想这是一个通用的方法。但是我不明白参数,有人能解释一下吗?我还做了一个迭代器,我将在解决方案中使用这个迭代器来运行列表,但是当我创建迭代器的一个实例时,这个方法会给我以下错误:"#nameofclass不能从静态上下文中引用“,那么我如何在这里创建一个实例?(由于某种原因它应该是静态的)我会感激任何帮助!
public static <T> int maks(List<T> list, Comparator<? super T> c)
{
// return max in a list
}
这里有一个问题,第一个代码清单编译得很好(JDK 1.6 | JDK 1.7):
ArrayList<String> a = new ArrayList<String>();
String[] s = a.toArray(new String[0]);
但是,如果我将List引用声明为原始类型:
ArrayList a = new ArrayList();
String[] s = a.toArray(new String[0]);
我得到一个编译器错误,告诉我String[]是必需的,但是找到了Object[]。
这意味着我的编译器将泛型方法解释为返回Object[]
我有一个方法,它要求类型为<T>。它只要求定义此类型的Count属性。如何将其指定为允许为其定义Count的所有对象的类型约束?
这就是我目前的情况:
private static void writeData<T>(String fileName, T rawData) where T : ICollection
但是,如果我尝试将它与IDictionary一起使用,这是行不通的。我还能做什么呢?
Update:我认为问题在于我将它限制为非泛型ICollection,而不是泛型ICollection<E>。
当定义泛型类时,在类型介绍中,每个类型参数充当将传递给类初始化程序或类方法的每个唯一类型的占位符。这意味着我必须将至少两种不同的数据类型传递给下面定义的BoxA类。
class BoxA<T, S> {
private T t;
private S s;
public void add(T t, S s) {
this.t = t;
this.s = s;
}
public T getFirst() {
return t;
}
public S getSecond() {
我有一个普通的课程:
public class ResultCard<T extends Bike>
private T bike;
public ResultCard(T bike)
{
this.bike = bike;
}
public int someMethod()
{
bike.showSpeed();
}
然后,我有几个类,扩展自行车。当我测试ResultCard bean时,我感到非常惊讶的是,我可以实例化它而不指定类型:
ResultCard resultCard = new ResultCard(bikeType);
以下呼吁起了作用:
在MSDN ()上,它说:
泛型方法可以出现在泛型或非通用类型上。需要注意的是,方法不是泛型的,仅仅因为它属于泛型类型,甚至是因为它具有形式参数,其类型是封闭类型的泛型参数。只有当方法有自己的类型参数列表时,它才是泛型的。在以下代码中,只有方法G是泛型的。
M不是所有意图和目的都是通用的吗?如果你在T型的某些例子上调用方法M,M只能有T型的输入和输出参数,使用这样的非神经型方法M会有什么问题吗?
class A
{
T G<T>(T arg)
{
T temp = arg;
//...
return temp;
可能重复:
按照我的理解,下面两个类的定义是相同的。那么,除了语法之外,还有什么不同呢?
abstract class Container[T] {}
class IntContainer extends Container[Int] {}
abstract class Container2 { type T }
class IntContainer2 extends Container2 { type T = Int }
当我查看反编译的字节码时,我注意到第一个集合仍然有泛型(尽管IntContainer被定义为具有类型对象:public class IntContainer e
标题可能有点模糊,但我想要做到这一点,但不需要在create方法中使用额外的lambda:
public class Wrapper
{
public static Wrapper Create<T>(Func<T, bool> someFunc) where T : Stream
{
return new Wrapper(a => someFunc(a as T)); // Works, but lambda
return new Wrapper((Func<Stream, bool>)(object)
可能重复:
如何将param传递给泛型构造器?
public class Payment<T> where T: HostFunctionContext, IClaimPayment, new()
{
public IResultEntity Display(MyUser user, string claim, int? cert)
{
**HostFunctionContext func = new T(user) as HostFunctionContext;** <~doesn't compile
我有一个泛型类,它帮助我检查参数值:
internal sealed class Argument<T>
where T : class
{
private void TraceAndThrow(Exception ex)
{
new InternalTraceHelper<T>().WriteError(ex);
throw ex;
}
internal void ThrowNull(object value, string argName)
{
if (Referenc
使用T参数的泛型方法肯定很方便。但是,我很好奇,如果您将一个参数(如Class<T> clazz )传递给该方法,那么泛型方法的使用将是什么。我想出了一个可能有用的案子。也许您只想根据类的类型运行方法的一部分。例如:
/** load(File, Collection<T>, Class<T>)
* Creates an object T from an xml. It also prints the contents of the collection if T is a House object.
* @return T
* Throws Except
我有一个传递泛型参数的方法。要执行一个必需的方法,我需要该方法的类实例。我怎么才能得到它。我使用了一个变通方法,但我想知道如何获得Class实例。
我使用的代码片段是:
public <T> T readModelWithId(Class<T> c, Serializable pk) {
// Some code here.
T t = (T)session.get(c, pk);
// Some code here.
return t;
}
问题是,我不想在此方法中传递Class实例,因为它与泛型类型的返回类型T相同。