Bu yöntem bir şekilde true
döndürüyor mu?"Instanceof Void" her zaman false döndürüyor mu?
public static <T> boolean isVoid(T t)
{
return t instanceof Void;
}
Bu yöntem bir şekilde true
döndürüyor mu?"Instanceof Void" her zaman false döndürüyor mu?
public static <T> boolean isVoid(T t)
{
return t instanceof Void;
}
Evet ama bu gerçekten yararlı değildir eminim:
AVoid
sınıfı böylece normalde kod
Void
vakalarına karşı gerek olmaz başlatılamaz
public static void main(final String[] args) throws Exception {
final Constructor c = Void.class.getDeclaredConstructors()[0];
c.setAccessible(true);
System.out.println(c.newInstance(null) instanceof Void);
}
. Yukarıdaki kod parçacığı, yansımayı kullanırken açığa vurabileceğiniz bir örneğidir ... ;-)
+1 yansıma "kötüye kullanım" –
+1 çok güzel! btw, sadece 'c.newInstance' ('null 'parametresine gerek yok) kullanın. – Bohemian
+1 Reflection ile oluşturulmasını engelleyen tek sınıf Class'tır. –
Hayır. Bunun doğru olması için onu çağırmanız ve Void
türünde bir argüman iletmeniz gerekir. Fakat sınıf Void kurucusu özeldir, bu yüzden onu arayamazsınız. Dahası, bu ders finaldir, bu yüzden onu genişletemezsiniz. Böylece, Void
sınıfının bir örneğini oluşturamazsınız. Ancak, yönteminizin gerçeğe dönüşmesini sağlamak için gereklidir.
BTW: Bunu gerçekten yapmak istiyorsanız, yansımayla Void
yapıcısını arayın. Fakat bunu sistem kötüye kullanımı olarak düşünebilirim. İyi şanslar.
No: bir değer gibi n'inci kez instanciated, hatta ile hack olmadan uzatılamaz söyledi beri void
(veya Void
) bir örneği olduğunu olmadığını kontrol neden
Constructor<Void> cv = Void.class.getDeclaredConstructor();
cv.setAccessible(true);
Void v = cv.newInstance();
System.out.println(v instanceof Void); //-> true
görmek yansıma. Ancak, daha kullanışlı bir durum için, belirli bir Class
boşluğun geçersiz olup olmadığını öğrenmek istiyorsanız, instanceof
kullanmazsınız ve yöntem parametreniz bunun yerine Class<?>
türünde olur. Bir test durumu şöyle olacaktır:
void = true
diğer kullanım durumları bu yöntem için, ama şu an başka yoktur görmüyorum olabilir çıktı olurdu
public class VoidCheckTest {
public static void main(String...args) throws SecurityException, NoSuchMethodException {
Class<VoidCheckTest> c = VoidCheckTest.class;
Method m = c.getMethod("main", String[].class);
System.out.println(m.getReturnType().getName() + " = " + isVoid(m.getReturnType()));
}
private static boolean isVoid(Class<?> t) {
return Void.class.isAssignableFrom(t) || void.class.equals(t);
}
}
.
Bu yönteme nasıl çağrı yaparsınız? bazı örnekler verebilir misin? –
Bu testi neden yapmak istiyorsun? Tüm bunların arkasında bir hikaye olmalı. –
@Hovercraft Ben sadece yanıltıcı behavoirs gibi Ben daha fazla bilmek istiyorum "Void" hakkında –