Представьте, что у вас есть абстрактный суперкласс, который является общим:
public abstract class Foo<? extends T> {}
И тогда у вас есть второй класс, который расширяет Foo с помощью общего бара, который расширяет T:
public class Second extends Foo<Bar> {}
Вы можете получить класс Bar.class
в классе Foo, выбрав Type
(из ответа bert bruynooghe) и вызывая его с помощью экземпляра Class
:
Type mySuperclass = myFoo.getClass().getGenericSuperclass();
Type tType = ((ParameterizedType)mySuperclass).getActualTypeArguments()[0];
//Parse it as String
String className = tType.toString().split(" ")[1];
Class clazz = Class.forName(className);
Вы должны отметить эту операцию не является идеальным, поэтому рекомендуется кэшировать вычисленное значение, чтобы избежать множественных вычислений. Одно из типичных применений - это общая реализация DAO.
Окончательная реализация:
public abstract class Foo<T> {
private Class<T> inferedClass;
public Class<T> getGenericClass(){
if(inferedClass == null){
Type mySuperclass = getClass().getGenericSuperclass();
Type tType = ((ParameterizedType)mySuperclass).getActualTypeArguments()[0];
String className = tType.toString().split(" ")[1];
inferedClass = Class.forName(className);
}
return inferedClass;
}
}
Возвращаемое значение - Bar.class при вызове из класса Foo в другой функции или из класса Bar.
У вас много синтаксических ошибок в коде.
Чтобы отсортировать массив с пользовательским сортированием, вы можете использовать это:
$array = array(1,3,5,6,7,8,11,12,17,11);
$arrayCount = count($array); // no need to evaluate the count on every iteration of the for loop
for($i=0; $i < $arrayCount - 1; $i++)
{
for($j = $i+1; $j < $arrayCount; $j++)
{
// if you want the array sorted from bigger to smaller number use `>` here
if($array[$j] < $array[$i])
{
$temp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $temp;
}
}
}
print_r($array);
, который выводит:
Array
(
[0] => 1
[1] => 3
[2] => 5
[3] => 6
[4] => 7
[5] => 8
[6] => 11
[7] => 11
[8] => 12
[9] => 17
)
Теперь, чтобы получить желаемое значение из массива или false
, если оно не существует, вы должны написать что-то вроде этого, используя встроенный метод array_search()
:
// Check if array contains a value 12, if it does return the index location in the array
// returns false if the value is not found
$index = array_search(12, $array);
if($index === false)
{
echo 'Value does not exist in the array.';
}
else
{
echo 'Value '.$array[$index].' is at index '.$index.' in the array.';
}